2013-04-15 4 views
55

मैं मान लीजिए इस (सरलीकृत):मैं XPath का उपयोग करके किसी भी गहराई के बाल तत्वों का चयन कैसे करूं?

<form id="myform"> 
    <!-- some input fields --> 
    <input type="submit" value="proceed"/> 
</form> 

तब मैं XPath //form[@id='myform']/input[@type='submit'] द्वारा सबमिट बटन चुन सकते हैं। महान।

हालांकि, मेरे टेम्पलेट बदल सकते हैं और मैं गहराई में लचीला होना चाहता हूं जिसमें सबमिट बटन स्थित है। यह एक तालिका में डाल दिया जा सकता है, इस तरह:

<form id="myform"> 
    <!-- some input fields --> 
    <table><tr><td> 
      <input type="submit" value="proceed"/> 
    </td></tr></table> 
</form> 

मैं जानता हूँ कि मैं तत्व है जो पोते हैं का चयन कर सकते हैं, लेकिन मैं भव्य भव्य भव्य चयन नहीं कर सकते -...- किसी भी गहराई से childeren। उदा .:

  • //form[@id='myform']/*/input[@type='submit'] केवल भव्य बच्चों का चयन करता है, और गहराई नहीं।
  • //form[@id='myform']/*/*/input[@type='submit'] केवल भव्य-भरे बच्चों का चयन करता है, कोई और कम गहराई नहीं।
  • //form[@id='myform']/**/input[@type='submit'] मान्य नहीं है।

तो, मैं तत्व आईडी का उपयोग किये बिना इस सबमिट बटन को विश्वसनीय रूप से कैसे चुनूं?

उत्तर

89

आप लगभग वहां हैं। बस उपयोग करें:

//form[@id='myform']//input[@type='submit'] 

// शॉर्टकट का उपयोग अभिव्यक्ति के अंदर भी किया जा सकता है।

+0

सी # इस नोटेशन को समझ में नहीं आता है। '// form // input' सी # में शून्य देता है जबकि क्रोम एक ही xpath – Achilles

+1

का उपयोग करके 35 इनपुट पा सकता है मेरी आखिरी टिप्पणी पर चर्चा की गई है: http://stackoverflow.com/questions/23232671/xpath-selects-in-htmlagilitypack- अपेक्षित – Achilles

5
//form/descendant::input[@type='submit'] 
+4

में कुछ विवरण जोड़ें। – piyushj

+0

यह PHP में बहुत अच्छा काम करता है – hanshenrik

6

यदि आप XmlDocument और XmlNode का उपयोग कर रहे हैं।

कहते हैं:

XmlNode f = root.SelectSingleNode("//form[@id='myform']"); 

उपयोग:

XmlNode s = f.SelectSingleNode(".//input[@type='submit']"); 

ऐसा नहीं है कि आप का उपयोग उपकरण पर निर्भर करता है। लेकिन .// किसी भी बच्चे का चयन करेगा, संदर्भ नोड से कोई गहराई।

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