2013-02-18 8 views
17

है, मैं XPath के लिए एक नवागत हूं।XPath अभिव्यक्ति उन तत्वों को ढूंढने के लिए जिनके टैग नाम में 'नाम'

मैं उन सभी तत्वों को प्राप्त करने का एक तरीका ढूंढ रहा हूं जिनके टैग नाम में एक विशेष स्ट्रिंग है।

उदाहरण के लिए, यदि मेरे पास नीचे जैसा एक्सएमएल है, तो मैं उन सभी तत्वों को प्राप्त करना चाहता हूं जिनके टैग नाम में 'नाम' शब्द शामिल है। यानी, मैं निम्नलिखित तत्वों को प्राप्त करना चाहता हूं: <SquareName>, <RectangleName>, और <ParallelogramName>

मैं name(), आदि में से कुछ संयोजनों की कोशिश की, लेकिन यह काम नहीं किया। कृपया सुझाव दें।

<Objects> 
<Four-Sided> 
    <Square> 
     <SquareName>ABCD</SquareName> 
     <Length>4</Length> 
     <Height>4</Height> 
     <Colour>Blue</Colour> 
    </Square> 
    <Rectangle> 
     <RectangleName>EFGH</RectangleName> 
     <Length>10</Length> 
     <Height>6</Height> 
     <Colour>Brown</Colour> 
    </Rectangle> 
    <Parallelogram> 
     <ParallelogramName>WXYZ</ParallelogramName> 
     <Length>12</Length> 
     <Height>4</Height> 
     <Colour>Black</Colour> 
    </Parallelogram> 
</Four-Sided> 
</Objects> 

उत्तर

22

एक XPath समाधान के लिए:

//*[contains(local-name(), 'Name')] 
+0

उपयोग कर सकते हैं परिणाम को देखने के बाद, मुझे लगता है कि यह है कि तत्वों के बीच रिटर्न, मुझे टैग तत्व के साथ 'अवधि अवधि' के रूप में एक तत्व से बचने की आवश्यकता है। मैं प्रोग्रामिक रूप से ऐसा कर सकता हूं लेकिन सोच रहा था कि क्या XPath के लिए इसका समाधान भी है? – user2082317

+1

आप या तो नियमित अभिव्यक्तियों का उपयोग कर सकते हैं या यदि यह केवल इसके लिए है, तो दूसरा भविष्यवाणी करें (या उन्हें 'या' का उपयोग करके गठबंधन करें): // // * [इसमें (स्थानीय-नाम(),' नाम ')] [स्थानीय-नाम ()! = 'अवधि नाम'] ' –

0

चूंकि कोई नाम स्थान उपसर्ग है, आप भी

//*[contains(name(), 'Name')] 
+0

समाधान के करीब। – mm759

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