gpt4 book ai didi

python - 检测元素的直接同级元素是文本还是 lxml 中的另一个元素

转载 作者:行者123 更新时间:2023-12-01 03:58:29 24 4
gpt4 key购买 nike

我正在使用 lxml 库和 Python 2.7 来解析 xml 文件。我需要检测兄弟元素之间是否没有任何文本。例如在以下 xml 部分中:

<cross-ref> [t1] </cross-ref> ***some text*** <cross-ref> [t2] </cross-ref>  
<cross-ref> [t3] </cross-ref><cross-ref> [t4] </cross-ref>

说我检测带有交叉引用标签的所有元素,我需要一种仅检测第二行上的交叉引用元素的方法,其中第二个元素位于第一个元素之后,并且它们之间没有文本。所以我猜想需要以下 for 循环,但显然这段代码会打印 [t1][t3]

for c in cross_refs:
# detect ***some text*** or do something else here
if c.getnext().tag == "cross-ref":
print c.text

我需要修改它,以便输出仅为 [t3]

最佳答案

答案中的三重嵌套 if 也可以用 XPath 表示,如下所示:

following-sibling::node()[1][self::cross-ref]

简而言之,仅当 XPath 是 cross-ref 元素时,XPath 才会返回最近的同级节点。请注意,这里的节点表示文本节点或元素节点。 XPath 可以按如下方式使用:

for c in cross_refs:
if c.xpath('boolean(following-sibling::node()[1][self::cross-ref])'):
print c.text

或者,如果您愿意,您可以首先只获取与此条件匹配的 cross-ref 元素:

cross_refs = tree.xpath('//cross-ref[following-sibling::node()[1][self::cross-ref]]')
for c in cross_refs:
print c.text

关于python - 检测元素的直接同级元素是文本还是 lxml 中的另一个元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37023388/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com