1

我正在使用 lxml,我有一个这样的 xml:

<UploadFile>
<Eu>
<AUTO_ID>4</AUTO_ID>
<Meter>000413031</Meter>
</Eu>
</UploadFile>

我怎样才能只获取具有 AUTO_ID 和 Meter 等文本的标签,而不是 UploadFile Eu?

我努力了:

    tree = lxml.etree.parse(xmlfile)
    root = tree.getroot()

for node in root.iter('*'):
    if node.text != None:
        print(node.tag,node.text)

但我仍然可以获得所有标签,我只希望标签有文字,我该怎么办?任何朋友可以帮忙?最好的问候!

4

2 回答 2

0

与 不同xml.etree的是,lxml 支持更复杂的 XPath 表达式,包括返回所有后代元素的 XPath,这些元素的子文本节点不为空或仅包含空格

    for node in root.xpath(".//*[text()[normalize-space()]]"):
        print(node.tag,node.text)
于 2021-04-30T06:38:44.953 回答
0

在您的 for 循环中,您可以使用 strip() 删除空格,然后检查是否 len>0 或者可以使用无检查if node.text.strip()

选项1:

import lxml
tree = lxml.etree.parse("my_xml.xml")
root = tree.getroot()

for node in root.iter('*'):
    if len(node.text.strip()) > 0: # check if len > 0, text will have some length
        print(node.tag,node.text)

选项2:

import lxml
tree = lxml.etree.parse("my_xml.xml")
root = tree.getroot()

for node in root.iter('*'): # checking if its None
    if node.text.strip():
        print(node.tag,node.text)
于 2021-04-30T04:17:49.537 回答