2012-02-27 26 views
10

के साथ तत्व को पकड़ती है, मैं एक एक्सपीएथ क्वेरी/स्ट्रिंग बनाने की कोशिश कर रहा हूं जो किसी XML दस्तावेज़ से विशिष्ट तत्व को पकड़ लेता है। मैं id = 38 के साथ तत्व को पकड़ने का प्रयास कर रहा हूं लेकिन मेरा कोड हमेशा किसी कारण से कुछ भी नहीं देता है।XPath स्ट्रिंग जो एक विशिष्ट आईडी मान

यदि आप मेरे कोड & पर मेरे कोड फ़ाइल को देखते हैं तो क्या आप मुझे बता सकते हैं कि XP ​​= मुझे id = 38 के साथ तत्व को पकड़ने की आवश्यकता है?

मेरे कोड है:

<courseg> 
    <group isempty="False" isbranch="true" id="1" name="abc"> 
     <group isempty="False" isbranch="true" id="38" name="def"></group> 
    </group> 
</courseg> 

उत्तर

19

XPath आप की जरूरत है

//*[@id='38'] 

यहाँ के साथ उदाहरण है:

XmlDocument xdoc = new XmlDocument(); 
xdoc.Load(getProductURL()); 
XmlNode node = xdoc.DocumentElement.SelectSingleNode("id('38')"); 

// node always is null for some reason? 

रास्ता एक्सएमएल आयोजित किया जाता है तो तरह है एक्स डॉक्यूमेंट:

 XDocument xdoc = XDocument.Parse(@" 
<courseg> 
    <group isempty=""False"" isbranch=""true"" id=""1"" name=""abc""> 
     <group isempty=""False"" isbranch=""true"" id=""38"" name=""def""></group> 
    </group> 
</courseg>"); 
     XElement node = xdoc.Root.XPathSelectElement("//*[@id='38']"); 
     Console.WriteLine(node); 
3

उपयोग इस XPath क्वेरी:

//*[@id = 38] 

यह id विशेषता के साथ प्रत्येक नोड का चयन करता है 38 के बराबर है। यदि आप अधिक विशिष्ट होना करने के लिए है, तो यानी groupid विशेषता के साथ 38 के बराबर का चयन करें, का उपयोग इस एक:

//group[@id = 38] 
-1

जब आप उल्लेख

xdoc.DocumentElement.SelectSingleNode("id('38')" 

आप के अंदर एक बच्चा नोड के लिए खोज करने के लिए XmlDocument पूछ रहे हैं रूट नोड जिसका नाम 'आईडी' है। लेकिन आदर्श 'आईडी' एक विशेषता है और xmlnode नहीं है।

तो तुम //group[@id = '38'] उपयोग करने के लिए 38

+0

गलत। यह नहीं है कि आईडी() फ़ंक्शन क्या करता है। –

5

समारोह आईडी ('P38') के मान के साथ सभी चाइल्ड नोड होने का नाम 'समूह' और विशेषता 'आईडी' प्राप्त करने के लिए एक आईडी मूल्य के साथ एक तत्व का चयन होता है पी 38 का। लेकिन इसका मतलब यह नहीं है कि "आईडी 'नामक एक विशेषता है। इसका अर्थ है डीटीडी या स्कीमा में टाइप आईडी के रूप में घोषित एक विशेषता। आपने डीटीडी या स्कीमा नहीं दिखाया है, और मुझे संदेह है कि आपके पास कोई नहीं है। यदि आपने किया, और यदि उसने आईडी आईडी के रूप में आईडी विशेषता घोषित की है, तो आपका दस्तावेज़ अमान्य होगा, क्योंकि आईडी मान सभी संख्यात्मक नहीं हो सकता है (विरासत एसजीएमएल कारणों के लिए, इसे किसी नाम का रूप लेना होगा)।

प्रैक्टिस में आईडी() फ़ंक्शन शायद तब तक सबसे अच्छा बचा जाता है जब तक आपके पास गंभीर प्रदर्शन आवश्यकता न हो। यह बहुत नाजुक है - यह केवल तब काम करता है जब आप स्कीमा या डीटीडी के खिलाफ स्रोत दस्तावेज़ को मान्य कर रहे हैं। एक्सएसएलटी में, इसके बजाय कुंजी() का उपयोग करें। वैकल्पिक रूप से, कई प्रोसेसर अब विशेषता नाम xml: id को स्कीमा या डीटीडी के संदर्भ में 'स्वयं घोषित करने' आईडी मान के रूप में पहचानते हैं: इसका उपयोग करें यदि आपका प्रोसेसर इसका समर्थन करता है।

संबंधित मुद्दे