2015-08-28 6 views
6

XPath 1.0 में, मैं वर्तमान (संदर्भ) नोड ए के सभी वंशज नोड्स सी का चयन कैसे कर सकता हूं, जो बी के मध्यवर्ती नोड में निहित नहीं हैं?वंश के तत्वों का चयन करें जो किसी अन्य प्रकार के तत्व में निहित नहीं हैं

उदाहरण के लिए, वर्तमान तत्व में निहित सभी <a> लिंक खोजें, जो <p> के अंदर नहीं हैं। लेकिन यदि वर्तमान तत्व स्वयं <p> के अंदर है, तो यह अप्रासंगिक है।

<p>     <—— this is irrelevant, because it's outside the current element 
    ... 
    <div>    <—— current element (context node) 
     ... 
     <a></a>  <—— the xpath should select this node 
     ... 
     <p> 
      ... 
      <a></a> <—— but not this, because it's inside a p, which is inside context 
      ... 
     <p> 
     ... 
    </div> 
    ... 
</p> 

... उदाहरण में हस्तक्षेप नोड्स के कई गहराई हो सकता है।

मैं एक्सएसएलटी 1.0 लिख रहा हूं, इसलिए अतिरिक्त कार्य generate-id(), current(), और ऐसे उपलब्ध हैं। यदि वर्तमान वंशज a तत्व पूर्वज p जो पूर्वज वर्तमान संदर्भ नोड है नहीं है

.//a[not(ancestor::p/ancestor::* = current())] 

यह XPath चेक:

+0

कुछ '/ p/div/a' जैसा है? और यह http://stackoverflow.com/questions/15818191/xpath-select-one-type-of-nodes-only-in-direct-child-nodes – fukanchik

+1

@ फ़ुकंचिक संख्या का डुप्लिकेट है, मैं पहले से ही ' div' (वर्तमान संदर्भ नोड) और मुझे उन सभी 'ए' का चयन करने की आवश्यकता है जो 'p' के अंदर नहीं हैं, संभवतः बीच में कई मध्य नोड्स के साथ, उदाहरण के लिए 'div' के कई स्तरों के बीच। – Tobia

उत्तर

5

यह एक संभव XPath है। दूसरे शब्दों में, यह जांचता है कि a तत्व में pa और वर्तमान संदर्भ नोड के बीच हस्तक्षेप नहीं है।

+1

यह समझ में आता है, लेकिन क्या '=' सही चीज कर रहा है? मुझे कुछ चाहिए जैसे '.// a [नहीं (पूर्वज :: पी/पूर्वज :: * [जेनरेट-आईडी (।) = जेनरेट-आईडी (वर्तमान())]]]? – Tobia

+0

@Tobia क्षमा करें, मुझे यकीन नहीं है कि अभिव्यक्ति तत्व के मूल्य की तुलना करेगी या संदर्भ के अनुसार तत्वों की तुलना करेगी (जो मुझे उम्मीद है) – har07

+2

मुझे नहीं लगता कि यह सही है, क्योंकि "यदि दोनों वस्तुएं होनी चाहिए तुलना नोड-सेट हैं, तो तुलना सही होगी यदि केवल पहले नोड-सेट में नोड है और दूसरे नोड-सेट में नोड है जैसे ** स्ट्रिंग-वैल्यू पर तुलना करने का नतीजा ** दो नोड्स के सत्य है। " [स्रोत] (http://www.w3.org/TR/xpath/#booleans) – Tobia

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

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