代码之家  ›  专栏  ›  技术社区  ›  JanFi86

通过按名称中的子字符串搜索元素来检索xml元素值

  •  0
  • JanFi86  · 技术社区  · 3 年前

    我需要通过按名称中的子字符串搜索元素来检索xml元素值,例如,我需要获取xml文件中名称包含的所有元素的值 client .

    我找到了一种通过属性查找具有xpath的元素的方法,但还没有找到元素名称的方法。

    1 回复  |  直到 3 年前
        1
  •  2
  •   Daniel Haley    3 年前

    如果您真的在使用lxml(问题标记为lxml和elementtree),您可以使用xpath函数 contains() 在谓词中。。。

    from lxml import etree
    
    xml = """
    <doc>
        <client1>foo</client1>
        <some_client>bar</some_client>
    </doc>
    """
    
    root = etree.fromstring(xml)
    
    for elem in root.xpath("//*[contains(name(),'client')]"):
        print(f"{elem.tag}: {elem.text}")
    

    打印输出。。。

    client1: foo
    some_client: bar
    

    ElementTree只有 limited xpath support ,因此一个选项是使用 .tag 所有物

    import xml.etree.ElementTree as etree
    
    xml = """
    <doc>
        <client1>foo</client1>
        <some_client>bar</some_client>
    </doc>
    """
    
    root = etree.fromstring(xml)
    
    for elem in root.iter():
        if "client" in elem.tag:
            print(f"{elem.tag}: {elem.text}")
    

    这将产生与上面相同的打印输出。