如何在ElementTree中迭代子文本节点(而不是子节点)?

2024-09-27 00:14:06 发布

您现在位置:Python中文网/ 问答频道 /正文

给一个像这样的元素

<A>
    hello

    <annotation> NOT part of text </annotation>

    world
</A>

如何使用ElementTree只获取子文本节点(比如XPathtext())?在

iter()和{}都是树漫游器,包括所有的子代节点。我所知道的没有直接的子迭代器。另外,iter()只查找元素(毕竟是ElementTree),因此不能用于收集文本节点。在

我知道有一个名为lxml的库,它提供了更好的XPath支持,但是在添加另一个依赖项之前,我想问一下。(另外,我对Python非常陌生,所以我可能会遗漏一些显而易见的东西。)


Tags: oftext文本元素helloworld节点not
1条回答
网友
1楼 · 发布于 2024-09-27 00:14:06

您发现示例的文本在三个属性中有点与直觉相反:

  • A、 “你好”的短信
  • 在注释.text对于“不是文本的一部分”
  • 在注释.tail为了“世界”

(空格省略)。这有点麻烦。然而,以下几点应该会有所帮助:

 import xml.etree.ElementTree as et

 xml = """
 <A>
     hello

     <annotation> NOT part of text </annotation>

     world
 </A>"""


 doc = et.fromstring(xml)


 def all_texts(root):
     if root.text is not None:
         yield root.text
     for child in root:
         if child.tail is not None:
             yield child.tail


 print list(all_texts(doc))

相关问题 更多 >

    热门问题