2009-03-27 15 views
5

यह मानते हुए कि मुझे अपने बेस नोड या उसके बच्चों का नाम नहीं पता है, "बेस नोड के ठीक नीचे सभी नोड्स" के लिए XPath वाक्यविन्यास क्या है?"उचित नोड के ठीक नीचे सभी नोड्स" के लिए उचित XPath क्या है?

पैटर्न एक XmlNode जा रहा है के साथ, मैं निम्नलिखित कोड है:

XmlNodeList kvpsList = pattern.SelectNodes(@"//"); 

कौन सा मेरे लिए सही लगता है, लेकिन मैं निम्नलिखित अपवाद:

System.Xml.XPath.XPathException: Expression must evaluate to a node-set. 

सही सिंटैक्स क्या है?

+0

नोट:: आपको लगता है कि शीर्ष तत्व से उतरना है, तो एक XPath अभिव्यक्ति है कि चयन इन है XML दस्तावेज़ में सभी नोड्स का चयन करना चाहता है तो "आधार नोड" द्वारा, जेकेके का स्पष्ट रूप से शीर्ष-स्तर तत्व (जिसे "दस्तावेज़ तत्व" या "बाहरी तत्व" के रूप में भी जाना जाता है) का अर्थ है।जेकेके का उपयोग उलझन में है क्योंकि वह * रूट * नोड (/) का मतलब नहीं है, जो शीर्ष-स्तर तत्व का अभिभावक है। – LarsH

उत्तर

7

दो वर्तमान जवाब गलत हैं:

/*/* 

सभी नोड्स कि शीर्ष नोड के बच्चे हैं का चयन नहीं करता। यह किसी भी पाठ नोड्स, प्रोसेसिंग-निर्देश या टिप्पणियों का चयन नहीं करता है जो शीर्ष तत्व के बच्चे हैं।

एक XPath अभिव्यक्ति है कि सभी नोड्स कि शीर्ष तत्व के बच्चों arte चयन है:

/*/node()

// एक वाक्य रचना सही XPath अभिव्यक्ति नहीं है, XPath Spec के अनुसार:

// /वंशज या स्वयं :: नोड()/

ध्यान दें करो बहुत अंत में एक अधूरा स्थान कदम की शुरुआत के लिए कम है विस्तारित संक्षेप में। यदि इसमें कुछ भी जोड़ा नहीं गया है, तो संपूर्ण XPath अभिव्यक्ति संक्षेप में समाप्त हो गई है और इसलिए, वाक्य रचनात्मक रूप से गलत है।

एक और टिप्पणी कि // संक्षिप्त नाम सभी नोड्स कि शीर्ष तत्व के बच्चे हैं के चयन को निर्दिष्ट करने के लिए आवश्यक नहीं है। बाद में पाठकों के लिए

/*//node()

8

पथ आप देख रहे हैं के बाद से यह एक ऑपरेटर है,

/*/* 

// एक सार्थक XPath अभिव्यक्ति नहीं है। यदि आपने //element जैसे कुछ लिखा है, तो यह XML दस्तावेज़ में कहीं भी element नामक प्रत्येक तत्व से मेल खाता है, इससे कोई फर्क नहीं पड़ता कि पदानुक्रम में कितना गहराई है।

/*/* कह रहा है "पदानुक्रम में दो स्तरों की गहराई वाले प्रत्येक नोड से मेल खाता है"।

+0

यह दोनों उत्तर और @ जेवेडे ने "नोड" और "तत्व" शब्द को भ्रमित कर दिया है। मुझे संदेह है कि @ जेकेके ने भी शर्तों को भ्रमित कर दिया है, इसलिए ये जवाब उनके अर्थ के संबंध में सही हैं, लेकिन उन्होंने जो कहा उसके संबंध में नहीं। "नोड्स" में तत्व, गुण, टेक्स्ट नोड्स, रूट नोड्स और अन्य शामिल हैं। तत्व प्रारंभ/अंत टैग के साथ व्यक्त की गई चीजें हैं: ''। एक्सपीएथ "*" बिना किसी अक्ष के निर्दिष्ट * तत्व * से मेल खाता है। उस पर अधिक के लिए @ Dimitre का जवाब देखें। – LarsH

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