2013-02-25 86 views
17

मेरा मानना ​​है कि इसे केवल कार्यान्वयन के संदर्भ के बिना मानक XPath का उपयोग करने का उत्तर दिया जाना चाहिए, लेकिन केवल संदर्भ के लिए मैं .NET (System.Xml नामस्थान) में XML DOM ऑब्जेक्ट्स का उपयोग कर रहा हूं। ।XPath निर्दिष्ट नाम के साथ सभी तत्वों का चयन करने के लिए

मेरे पास एक XML दस्तावेज़ के अंदर कहीं गहराई से मेरे फ़ंक्शन को सौंप दिया गया है, और मैं उन नोड्स के मध्यवर्ती पथ के बावजूद, इस नोड के सभी वंशज तत्वों का चयन करना चाहता हूं, जिनके पास एक विशिष्ट नाम है। कॉल मैं इस तरह दिखता है बना रही हूँ:

... 
<food> 
    <tart> 
    <apple color="yellow"/> 
    </tart> 
    <pie> 
    <crust quality="flaky"/> 
    <filling> 
     <apple color="red"/> 
    </filling> 
    </pie> 
    <apple color="green"/> 
</food> 
... 

क्या मैं चाहता हूँ "सेब" नोड्स के सभी की एक सूची है:

node.SelectNodes("some XPath here"); 

नोड के साथ मैं काम कर रहा हूँ कुछ इस तरह दिखता , यानी 3 परिणाम। मैंने कुछ अलग-अलग चीजों की कोशिश की है, लेकिन उनमें से कोई भी मुझे जो चाहिए वह प्राप्त नहीं करता है।

node.SelectNodes("apple"); 

यह मुझे एक परिणाम, हरा सेब देता है।

node.SelectNodes("*/apple"); 

यह मैं एक परिणाम, पीले सेब देता है।

node.SelectNodes("//apple"); 

यह मैं परिणामों के सैकड़ों देता है, दस्तावेज़ में हर सेब नोड, या कम से कम हो सकता है कि हर सेब नोड है कि दस्तावेज़ की जड़ का एक सीधा बच्चा है की तरह लग रहा है।

मैं एक XPath कैसे बना सकता हूं जो मुझे मेरे वर्तमान नोड के नीचे सभी सेब नोड्स देगा, भले ही वर्तमान नोड के नीचे कितना गहराई हो? विशेष रूप से, ऊपर दिए गए मेरे उदाहरण के आधार पर, मुझे तीन परिणाम मिलना चाहिए - लाल, हरा, और पीले सेब।

उत्तर

25

.//apple आज़माएं। यह सभी apple नोड्स सूचीबद्ध करता है जो वर्तमान नोड के वंशज हैं। इस विषय की बेहतर समझ के लिए, आपको सीखना चाहिए कि XPath axes कैसे काम करते हैं। उदाहरण के लिए, आप descendant::apple भी लिख सकते हैं।

+0

बिल्कुल सही, यह वही है जो मैं ढूंढ रहा था। मैं एक घंटे के लिए googled और वह नहीं मिला। बस यह स्पष्ट करने के लिए, कि मैं सिंटैक्स को सही ढंग से समझता हूं - डबल स्लेश मुझे गहराई के बावजूद सभी सेब नोड्स देता है (जैसा कि मैंने उपरोक्त मेरे प्रश्न में कोशिश की है), और उनके सामने बिंदु वर्तमान नोड के वंशजों को चयन को सीमित करता है। क्या वो सही है? –

+0

हाँ, यह सही है। मैंने आपको कुछ अतिरिक्त पॉइंटर्स देने के लिए भी अपनी पोस्ट संपादित की। – nwellnhof

+0

आपने अपना जवाब यह कहने के लिए संपादित किया कि मुझे सीखना चाहिए कि XPath axes कैसे काम करते हैं - मैं सहमत हूं। क्या आपके पास अच्छे संसाधनों के बारे में कोई सुझाव है, मुझे जांच करनी चाहिए? –

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

  • कोई संबंधित समस्या नहीं^_^