का उपयोग करके पैरेंट नोड्स का पालन करें I XPath के साथ कुछ HTML को पार्स करने का प्रयास कर रहा हूं। नीचे सरलीकृत एक्सएमएल उदाहरण के बाद, मैं स्ट्रिंग 'टेक्स्ट 1' से मेल खाना चाहता हूं, फिर प्रासंगिक content
नोड की सामग्री को पकड़ें।टेक्स्ट नोड से मिलान कैसे करें, फिर XPath
<doc>
<block>
<title>Text 1</title>
<content>Stuff I want</content>
</block>
<block>
<title>Text 2</title>
<content>Stuff I don't want</content>
</block>
</doc>
मेरे अजगर कोड फेंकता एक wobbly:
>>> from lxml import etree
>>>
>>> tree = etree.XML("<doc><block><title>Text 1</title><content>Stuff
I want</content></block><block><title>Text 2</title><content>Stuff I d
on't want</content></block></doc>")
>>>
>>> # get all titles
... tree.xpath('//title/text()')
['Text 1', 'Text 2']
>>>
>>> # match 'Text 1'
... tree.xpath('//title/text()="Text 1"')
True
>>>
>>> # Follow parent from selected nodes
... tree.xpath('//title/text()/../..//text()')
['Text 1', 'Stuff I want', 'Text 2', "Stuff I don't want"]
>>>
>>> # Follow parent from selected node
... tree.xpath('//title/text()="Text 1"/../..//text()')
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "lxml.etree.pyx", line 1330, in lxml.etree._Element.xpath (src/
lxml/lxml.etree.c:14542)
File "xpath.pxi", line 287, in lxml.etree.XPathElementEvaluator.__ca
ll__ (src/lxml/lxml.etree.c:90093)
File "xpath.pxi", line 209, in lxml.etree._XPathEvaluatorBase._handl
e_result (src/lxml/lxml.etree.c:89446)
File "xpath.pxi", line 194, in lxml.etree._XPathEvaluatorBase._raise
_eval_error (src/lxml/lxml.etree.c:89281)
lxml.etree.XPathEvalError: Invalid type
XPath में यह संभव है? क्या मुझे यह व्यक्त करने की ज़रूरत है कि मैं अलग-अलग तरीके से क्या करना चाहता हूं?
ओह, सरल सच है! किंडा समझ में आता है कि मैं अब टेक्स्ट() विशेषता का चयन कर रहा हूं। – Mat
प्रासंगिक सामग्री नोड – Dror
@ डोरर प्राप्त करने के लिए आप // ब्लॉक [शीर्षक = 'टेक्स्ट 1']/सामग्री का भी उपयोग कर सकते हैं: अब यह जानना उपयोगी है। – Mat