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


101

मान लीजिए कि मेरे पास यह (सरलीकृत) है:

<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>

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

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

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

जवाबों:


159

तुम लगभग वहां थे। बस उपयोग करें:

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

//शॉर्टकट भी एक अभिव्यक्ति के अंदर इस्तेमाल किया जा सकता।


C # इस संकेतन को समझ नहीं पा रहा है। //form//inputC # में null देता है जबकि Chrome उसी xpath का उपयोग करके 35 इनपुट पा सकता है
Achilles

1
मेरी अंतिम टिप्पणी यहां चर्चा की गई है: stackoverflow.com/questions/23232671/…
अचिल्स

14

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

कहते हैं:

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

उपयोग:

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

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


पहले निकाले गए एक निश्चित XML नोड पर SelectSingleNode कमांड का उपयोग करके पॉवर्सशेल के भीतर अच्छी तरह से काम करता है।
Gizmo3399


0

इसके अलावा, आप इसे सीएसएस चयनकर्ताओं के साथ कर सकते हैं:

form#myform input[type='submit']

css इलेक्टर में स्पेस बीनी तत्वों का अर्थ है इनपुट सर्च करना [type = 'submit'] वह तत्व जो पेरेंट फॉर्म के किसी भी गहराई पर # myform एलिमेंट

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.