2010-11-11 23 views
22

से शुरू होता है मैं एक तत्व के सभी विशेषताओं को ढूंढने के लिए देख रहा हूं जो एक निश्चित पैटर्न से मेल खाते हैं।विशेषता पैटर्न खोजें जो एक निश्चित पैटर्न

एक तत्व

<element s2="1" name="aaaa" id="1" /> 
<element s3="1" name="aaaa" id="2" /> 

मैं सभी विशेषताओं कि के साथ शुरू ढूँढने में सक्षम होना चाहते हैं के लिए

तो 'एस' (मूल्य के लिए पहले तत्व के लिए एस 1 के मूल्य और S3 लौटने दूसरे तत्व के)।

यदि यह xpath की क्षमता से बाहर है तो कृपया मुझे बताएं।

उत्तर

35

उपयोग का उपयोग कर की तुलना में बेहतर लग सकती है:

element/@*[starts-with(name(), 's')] 

यह XPath अभिव्यक्ति सभी गुण नोड्स जिसका नाम स्ट्रिंग 's' के साथ शुरू होता चयन करता है और कि element नामित तत्वों के गुण हैं जो वर्तमान नोड के बच्चे हैं।

starts-with() XPath 1.0

+0

प्रतिक्रिया के लिए बहुत बहुत धन्यवाद, यह भी एक अच्छा जवाब है। – Dunderklumpen

+0

विज्ञापन के रूप में काम करता है और मुझे मूल उत्तर भी काम करने में मदद करता है। – Dunderklumpen

+0

यह वही था जो मैं खोज रहा था! प्रश्न और उत्तर के लिए धन्यवाद। :) – ParagJ

3
element/@*[substring(name(), 1,1) = "s"] 

किसी भी विशेषता से मेल खाने वाली किसी भी विशेषता से मेल खाएगा।

समारोह starts-with()substring()

+0

XMLSpy में इसका उपयोग कर हमम, जो एक्सपैथ के लिए मेरा जाने-जाने वाला एप्लिकेशन है, मुझे एक त्रुटि मिल रही है "अप्रत्याशित टोकन -" [सबस्ट्रिंग (नाम(), 1,1) = "। – Dunderklumpen

+0

यह निश्चित रूप से उस दृष्टिकोण की तरह दिखता है जिसकी मुझे जवाब के लिए बहुत धन्यवाद चाहिए। – Dunderklumpen

+0

डिमिट्री के लिए धन्यवाद निम्नलिखित सबस्ट्रिंग पैटर्न भी तत्व/@ * [सबस्ट्रिंग (नाम(), 1,1) = 'एस'] – Dunderklumpen

0

में एक मानक समारोह है मैं @Ledhund दोनों @ Dimitre-Novatchev और से दिए गए उत्तर परीक्षण किया है, में lxml.html मॉड्यूल का उपयोग कर अजगर है।

दोनों element/@*[starts-with(name(), 's')] और element/@*[substring(name(), 1,1) = "s"] वापसी केवल मूल्यों s2 और S3 की। आप यह नहीं जान पाएंगे कि कौन सा मूल्य किस विशेषता से संबंधित है।

मुझे लगता है कि अभ्यास में मुझे तत्वों को खोजने में अधिक रुचि होगी जिसमें उनके मूल्यों के बजाय विशिष्ट वर्णों से शुरू होने वाले नामों के गुण शामिल होंगे।

प्राप्त करने के लिए है कि बहुत सरल है, बस अंत में /.. जोड़ने के लिए,

element/@*[starts-with(name(), "s")]/..

या

element/@*[starts-with(name(), "s")]/parent::*

या

element/@*[starts-with(name(), "s")]/parent::node()

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