使用lxml python3.5从xmlstring中删除特定元素

2024-04-23 16:02:27 发布

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

我将下面的xml作为python函数的输入。我想找到一个有空值的元素((firstChild.nodeValue))并从xml中完全删除它并返回字符串。我有一个只使用lxml模块的意外情况。我能得到帮助吗。在

<country name="Liechtenstein">
    <rank></rank>
    <a></a>
    <b></b>
    <year>2008</year>
    <gdppc>141100</gdppc>
    <neighbor name="Austria" direction="E">345</neighbor>
</country>

我希望输出是:-

^{pr2}$

我基本上有一个包含标记名的常量列表的灵活性,我可以在其中迭代并找到文本。在下面是列表。 a=('rank'、'year'、'a'、'b'、'gdppc'、'neighbor')

请帮忙!在


Tags: 函数字符串name元素列表xmlyearcountry
2条回答

您可以使用联合在单个xpath中查找所有节点,然后假设您想删除没有文本的节点,可以直接调用tree.remove(node)

x = """<country name="Liechtenstein">
    <rank></rank>
    <a></a>
    <b></b>
    <year>2008</year>
    <gdppc>141100</gdppc>
    <neighbor name="Austria" direction="E">345</neighbor>
</country>"""

from lxml import etree


tree = etree.fromstring(x)

a = ('rank','year','a','b','gdppc','neighbor')

for node in tree.xpath("|".join(map("//{}".format, a))):
    if not node.text:
        tree.remove(node)
print(etree.tostring(tree).decode("utf-8"))

这会给你:

^{pr2}$

以下代码有效:)

def remove_empty_elements(self,xml_input):
    tree = etree.fromstring(xml_input)
    for found in tree.xpath("//*[text()=' ']"):
        print("deleted " + str(found))
        found.getparent().remove(found)
    print(etree.tostring(tree).decode("utf-8"))

相关问题 更多 >