【发布时间】:2017-11-09 17:34:40
【问题描述】:
我正在使用 ElementTree 来解析我拥有的 XML 文档。我从u 标签中获取文本。其中一些包含我需要过滤掉或保留为文本的混合内容。我有两个例子是:
<u>
<vocal type="filler">
<desc>eh</desc>
</vocal>¿Sí?
</u>
<u>Pues...
<vocal type="non-ling">
<desc>laugh</desc>
</vocal>A mí no me suena.
</u>
如果它的类型是filler,我想获取语音标签中的文本,但如果它的类型是non-ling,则不是。
如果我遍历u 的孩子,不知何故最后一个文本位总是丢失。我可以达到它的唯一方法是使用itertext()。但是这样就失去了检查声音标签类型的机会。
我怎样才能解析它,以便得到这样的结果:
eh ¿Sí?
Pues... A mí no me suena.
【问题讨论】:
-
您必须“手动”迭代所有子节点和文本节点(即不使用
itertext())并过滤掉不需要的内容。或者,您可以使用简单的 XSLT 转换对 XML 进行预处理,以删除您不想要的子树。 -
当我手动迭代时,最后一个文本位总是丢失。
-
显示您用于手动迭代的代码。可能是递归的,你还记得在递归调用后继续迭代以捕获后面的文本节点吗?
-
for t in u_element.iter(): print(t.text)-> 这只会在第一个u元素中打印“eh”,在第二个u元素中打印“Pues...laugh”。不知道我知道该怎么做。
标签: python xml elementtree