python - 如何匹配文本节点然后使用 XPath 跟随父节点

标签 python html xpath lxml

我正在尝试使用 XPath 解析一些 HTML。按照下面的简化 XML 示例,我想匹配字符串“Text 1”,然后获取相关 content 节点的内容。

<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>

我的 Python 代码出现了问题:

>>> 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 中可行吗?我需要用不同的方式表达我想做的事情吗?

最佳答案

你想要那个吗?

//title[text()='Text 1']/../content/text()

关于python - 如何匹配文本节点然后使用 XPath 跟随父节点,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/598722/

相关文章:

python - 递归 glob 不返回文件

python - 如何用矢量化计算距离矩阵的种类

python - 将 UDF 应用于 pyspark 数据帧的子集

html - 为什么文字会褪色但图像不会褪色?

javascript - 在选项卡更改时将焦点设置到 Bootstrap TabContent 中的输入

php - 编码时为什么要格式化以及如何格式化

java - Selenium Webdriver - 无法使用 css 或 xpath 进行搜索,但可以使用 'by id' 或 'by class' 进行搜索

Python:让这段代码更紧凑?

python - Scrapy xpath错误: 'Selector' object has no attribute '_default_type'

java - Xpath 在移动到其他元素时添加 'custom string'