2009-06-01 25 views
35

मैं XDocument से नामटेबल कैसे प्राप्त करूं?मैं XDocument से नेमटेबल कैसे प्राप्त करूं?

ऐसा लगता है कि XmlDocument में नामटेबल संपत्ति नहीं है।

संपादित करें: एक उत्तर की कमी के आधार पर मुझे लगता है कि मैं इस बिंदु को याद कर रहा हूं।

मैं इस तरह एक XDocument के खिलाफ XPath प्रश्नों कर रहा हूँ ...

document.XPathSelectElements("//xx:Name", namespaceManager); 

यह ठीक काम करता है, लेकिन मैं मैन्युअल रूप से नहीं बल्कि से मौजूदा nametable को दुरुस्त करने नामस्थान मैं XmlNamespaceManager लिए उपयोग करना चाहते हैं जोड़ने के लिए आपके जैसे XDocument एक XML दस्तावेज़ के साथ होगा।

+0

कृपया एक संभावित जवाब के लिए दिए गए लिंक पर एक नज़र डालें .... http://stackoverflow.com/questions/879728/can-i-use-predefined-namespaces-when-loading- an-xdocument –

उत्तर

25

आपको एक्सएमएल रीडर के माध्यम से एक्सएमएल को फेंकने और XmlReader की नामटेबल संपत्ति का उपयोग करने की आवश्यकता है।

आप पहले से ही Xml आप एक XDocument में लोड कर रहे हैं है तो सुनिश्चित करें कि आप XDocument लोड करने के लिए एक XmlReader का उपयोग कर: -

XmlReader reader = new XmlTextReader(someStream); 
XDocument doc = XDocument.Load(reader); 
XmlNameTable table = reader.NameTable; 

आप XDocument के साथ शुरू से Xml निर्माण कर रहे हैं, तो आप XDocument के कॉल करने के लिए की आवश्यकता होगी CreateReader विधि तब कुछ पाठक का उपभोग करें। एक बार पाठक का उपयोग हो जाने के बाद (एक और एक्सडॉक दस्तावेज लोड करना कहें लेकिन कुछ बेहतर कुछ नहीं होगा जो पाठक को XDocument की सामग्री के माध्यम से चलाने का कारण बनता है) आप नामटेबल को पुनर्प्राप्त कर सकते हैं।

20

मैं इसे इस तरह से किया था:

//Get the data into the XDoc 
XDocument doc = XDocument.Parse(data); 
//Grab the reader 
var reader = doc.CreateReader(); 
//Set the root 
var root = doc.Root; 
//Use the reader NameTable 
var namespaceManager = new XmlNamespaceManager(reader.NameTable); 
//Add the GeoRSS NS 
namespaceManager.AddNamespace("georss", "http://www.georss.org/georss"); 
//Do something with it 
Debug.WriteLine(root.XPathSelectElement("//georss:point", namespaceManager).Value); 

मैट

+0

यदि आपके पास केवल xml टेक्स्ट या XDocument है जो एकमात्र तरीका है, लेकिन यदि आपके पास XmlReader था तो पिछले समाधान अधिक कुशल है। – dmihailescu

3

मैं मैन्युअल रूप से नहीं बल्कि XDocument तरह से मौजूदा nametable को दुरुस्त करने नामस्थान मैं XmlNamespaceManager लिए उपयोग करना चाहते हैं जोड़ने के लिए आप एक एक्सएमएल दस्तावेज़ के साथ होगा।

XDocument project = XDocument.Load(path); 
//Or: XDocument project = XDocument.Parse(xml); 
var nsMgr = new XmlNamespaceManager(new NameTable()); 
//Or: var nsMgr = new XmlNamespaceManager(doc.CreateReader().NameTable); 
nsMgr.AddNamespace("msproj", "http://schemas.microsoft.com/developer/msbuild/2003"); 
var itemGroups = project.XPathSelectElements(@"msproj:Project/msproj:ItemGroup", nsMgr).ToList(); 
संबंधित मुद्दे