2009-02-18 23 views
10

के साथ एक एक्सएमएल दस्तावेज़ पर XPath मेरे पास इस XML दस्तावेज़ को नेमस्पेस के साथ है और मैं XPath का उपयोग करके कुछ नोड्स निकालना चाहता हूं।नामस्थान

<ArrayOfAnyType xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns="http://tempuri.org/"> 
    <anyType xsi:type="Document"> 
    <Id>5</Id> 
    <Title>T1</Title> 
    </anyType> 

    <anyType xsi:type="Document"> 
    <Id>15</Id> 
    <Title>T15</Title> 
    </anyType> 
</ArrayOfAnyType> 

क्या है XPath अभिव्यक्ति अगर मैं xsi के साथ सभी "anytype" तत्वों निकालना चाहते हैं होने जा रहा: type = "दस्तावेज़"

यहाँ दस्तावेज़ है?

मैं इस की कोशिश की है:

//anyType[@xsi:type="Document"] 

और यह काम नहीं करता:

+0

xpath का कौन सा संस्करण उपयोग कर रहे हैं? xpath संस्करण अलग-अलग नामस्थानों को संभालते हैं? –

+0

ऐसा लगता है कि मुझे यह कहना है: '// xmlns: anyType [@xsi: type = "document"]' इसे काम करने के लिए – EnToutCas

+0

डुप्ड: - http://stackoverflow.com/questions/536441/xpath-namespace- ड्राइविंग -मे-पागल - http://stackoverflow.com/questions/11345/xpaths-and-default-namespaces - http://stackoverflow.com/questions/103576/whats-wrong-with-my-xpath-xml – annakata

उत्तर

16

आप सी # का उपयोग कर रहे हैं तो आप तत्व अपने XPath में "anytype" के लिए नाम स्थान निर्दिष्ट करना होगा:

var xml = new XmlDocument(); 
xml.LoadXml("your xml"); 
var names = new XmlNamespaceManager(xml.NameTable); 
names.AddNamespace("xsi", "http://www.w3.org/2001/XMLSchema-instance"); 
names.AddNamespace("a", "http://tempuri.org/"); 
var nodes = xml.SelectNodes("//a:anyType[@xsi:type='Document']", names); 
+0

क्या 'ए: anyType' के साथ है? क्या यह जादू का कुछ प्रकार है? – jcollum

+0

नहीं, यह उपरोक्त प्रश्न में एक्सएमएल तत्व का नाम मांगा जा रहा है। – David

+0

आह, मैं देखता हूं, बहुत अधिक – jcollum

0

मुझे लगता है कि

//anyType[namespace-uri() = "http://www.w3.org/2001/XMLSchema-instance"][local-name() = "type"] 

जो भी आप चाहते हैं वह करेंगे।

+0

पर स्क्रॉल नहीं किया धन्यवाद, मुझे लगता है कि मेरी मूल अभिव्यक्ति में क्या गलत है, मुझे नेमस्पेस "xmlns" के साथ किसी भी प्रकार का उपसर्ग करने की आवश्यकता है। – EnToutCas

-1

लगभग एक ही समस्या थी, मैं xsi के लिए सही नाम स्थान जोड़ने के लिए भूल गया: प्रकार (http://www.w3.org/2001/XMLSchema-instance) http://www.w3.org/2001/XMLSchema उपयोग कर रहा था और मैं किसी भी परिणाम प्राप्त कभी नहीं था - अब यह निम्नलिखित तरीके से काम कर रहा है:

<xsl:value-of select="/item1/item2/item3/@xsi:type"></xsl:value-of> 
0

इस तरह आप नाम स्थान निर्दिष्ट करने की आवश्यकता नहीं है:

XmlDocument xmlDoc = new XmlDocument(); 
xmlDoc.LoadXml("your xml"); 
XmlNode node = xmlDoc.SelectSingleNode("/*[local-name() = 'anyType']"); 
XmlNode nodeToImport = xmlDoc2.ImportNode(node, true); 
xmlDoc2.AppendChild(nodeToImport); 
संबंधित मुद्दे