2010-06-08 9 views
50

इस एक्सएमएल में, मैं मैच के लिए, तत्व से युक्त 'मैच' (random2 तत्व)XPath केवल पाठ वाले तत्वों वापस जाने के लिए, और नहीं अपने माता-पिता

<root> 
<random1> 
    <random2>match</random2> 
    <random3>nomatch</random3> 
</random1> 
</root> 

ठीक करना चाहते हैं, अब तक मेरे पास है:

//[re:test(.,'match','i')] (with re in the proper namespace) 

इस रिटर्न random2, random1 और जड़ ... मैं केवल "random2" पाने के लिए

किसी भी विचार चाहते हैं?

+0

आप मैच के लिए अगर यह पाठ में कहीं भी शब्द है देख रहे हैं (उदाहरण के लिए "देख अगर यह होगा * मैच * शब्द"), या केवल तत्वों के बराबर एक मूल्य है कि "मैच "(आसपास के सफेद जगह को अनदेखा कर रहे हैं)? –

+0

यह है कि प्रासंगिक नहीं है, या तो काम करेगा। समस्या मुख्य रूप से किया गया था कि यह यह के माता-पिता लौट रहा था और साथ ही – julian

उत्तर

99

आप तत्वों है कि "मैच" होते हैं, या कि बराबर "मैच" खोजने के लिए करना चाहते हैं?

//*[text()='match'] 

यह सभी तत्वों को मिलेगा:

यह तत्व है कि पाठ नोड्स बराबर 'मैच' (मेल खाता है, क्योंकि प्रमुख और random2 में खाली स्थान के अनुगामी के तत्वों में से कोई नहीं) मिलेगा कि पाठ नोड्स के बराबर "मैच", है को दूर करने के लिए अग्रणी और पिछली श्वेत रिक्ति के बाद (random2 से मेल खाता है):

//*/text()[normalize-space(.)='match']/parent::* 

यह सभी तत्वों पाठ नोड मूल्य में 'मैच' होते हैं (मेल खाता है random2 और random3) मिलेगा:

//*[contains(text(),'match')] 

यह XPATH 2.0 समाधान मैचों का उपयोग करता है() फ़ंक्शन और एक regex पैटर्न है कि पाठ नोड्स 'मैच' होते हैं और स्ट्रिंग के शुरू में शुरू के लिए लग रहा है (यानी ^) या एक शब्द सीमा (अर्थात \W) और) स्ट्रिंग के अंत (अर्थात $ या एक शब्द सीमा द्वारा समाप्त। तीसरे पैरामीटर i regex पैटर्न केस-संवेदी मूल्यांकन करता है। (random2 से मेल खाता है)

//*[matches(text(),'(^|\W)match($|\W)','i')] 
+0

आपकी दूसरी बयान सही नहीं है। संकेत: एक से अधिक टेक्स्ट नोड्स वाला तत्व लें जिनके पहले टेक्स्ट नोड में "मैच" नहीं है। –

+0

धन्यवाद @Dimitre। इसे किसी ऐसे चीज़ के साथ अपडेट किया गया जो अधिक मजबूत होना चाहिए। मैं पहली बार एक का उपयोग कर सकते हैं | –

+0

वास्तव में मैं '(टी टी) *।^मा' की तरह regexp के साथ एक विशिष्ट क्वेरी चलाना चाहते हैं? //*[text()='^ma(t|T).* '] सही? – julian

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