【问题标题】:python xml print particular child node based on sub-element textpython xml根据子元素文本打印特定的子节点
【发布时间】:2017-11-15 10:29:40
【问题描述】:

我有一个示例 XML,如下所示:

<data xmlns:nc="urn:ietf:params:xml:ns:netconf:base:1.0" xmlns="urn:ietf:params:xml:ns:netconf:base:1.0">
    <sessions xmlns="com:infinera:common:session">
        <session>
            <MoId>admin_12</MoId>
            <AccountName>admin</AccountName>
            <ProtocolType>SSH</ProtocolType>
            <MgmtAppType>CLI</MgmtAppType>
            <AuthenticationType>LOCAL</AuthenticationType>
        </session>
        <session>
            <MoId>admin_13</MoId>
            <AccountName>admin</AccountName>
            <ProtocolType>TELNET</ProtocolType>
            <MgmtAppType>TL1</MgmtAppType>
            <AuthenticationType>LOCAL</AuthenticationType>
        <session>
    </sessions>
</data>

在这里,我想遍历子项以查找 MgmtAppType 的值是否为 TL1,如果是,我想打印与之关联的所有元素,即 MoID、AccountName 、协议类型、管理应用类型、身份验证类型。 我尝试使用以下代码,但这仅打印 MgmtAppType

的值
import xml.etree.ElementTree as ET
root = ET.parse('C:\\session.xml')
roots = root.getroot()
for sess in roots.iter():
    if (sess.tag == "{com:infinera:common:session}MgmtAppType") and (sess.text == "TL1"):
            for chd in sess.iter():
                    print chd.text

如何根据搜索打印特定子节点的所有元素?

【问题讨论】:

    标签: python xml xml-parsing elementtree


    【解决方案1】:

    搜索命名空间 XML 示例的更好方法是使用您自己的前缀创建字典并在搜索函数中使用这些前缀:

    import xml.etree.ElementTree as ET
    
    root = ET.parse('C:\\session.xml').getroot()
    ns = {'common': 'com:infinera:common:session'}
    for session in root.findall('common:sessions/common:session[common:MgmtAppType="TL1"]', ns):
        print([el.text for el in list(session)])
    

    输出(作为连续元素值的列表):

    ['admin_13', 'admin', 'TELNET', 'TL1', 'LOCAL']
    

    https://docs.python.org/3/library/xml.etree.elementtree.html#parsing-xml-with-namespaces

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-12-28
      • 2017-07-30
      • 2015-01-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多