【问题标题】:How do I read the text of specific child nodes in ElementTree?如何读取 ElementTree 中特定子节点的文本?
【发布时间】:2019-07-14 21:14:55
【问题描述】:

我正在使用 ElementTree 处理 XML 文件,每个文件有大约 5000 个这些“资产”节点

<asset id="83">
    <name/>
    <tag>0</tag>
    <vin>3AKJGLBG6GSGZ6917</vin>
    <fleet>131283</fleet>
    <type id="0">Standard</type>
    <subtype/>
    <exsid/>
    <mileage>0</mileage>
    <location>B106</location>
    <mileoffset>0</mileoffset>
    <enginehouroffset>0</enginehouroffset>
    <radioaddress/>
    <mfg/>
    <inservice>04 Apr 2017</inservice>
    <inspdate/>
    <status>1</status>
    <opstatus timestamp="1491335031">unknown</opstatus>
    <gps>567T646576</gps>
    <homeloi/>
</asset>

我需要
资产节点上 id 属性的值
vin 节点的文本
gps节点的文本

如何直接读取“vin”和“gps”子节点的文本而无需遍历所有子节点?

for asset_xml in root.findall("./assetlist/asset"):
    print(asset_xml.attrib['id'])
    for asset_xml_children in asset_xml:
        if (asset_xml_children.tag == 'vin'):
            print(str(asset_xml_children.text))
        if (asset_xml_children.tag == 'gps'):
            print(str(asset_xml_children.text))

【问题讨论】:

    标签: python-3.x elementtree celementtree


    【解决方案1】:

    您可以执行相对于每个asset 元素的XPath 以直接获取vingps,而无需循环:

    for asset_xml in root.findall("./assetlist/asset"):
        print(asset_xml.attrib['id'])
    
        vin = asset_xml.find("vin")
        print(str(vin.text))
    
        gps = asset_xml.find("gps")
        print(str(gps.text))
    

    【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-05-13
    • 1970-01-01
    • 2015-12-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多