【问题标题】:XML parse does not show nodesXML 解析不显示节点
【发布时间】:2019-07-01 11:06:53
【问题描述】:
from xml.etree import ElementTree

t = """<collection xmlns:y="http://tail-f.com/ns/rest">
  <appliance xmlns="http://networks.com/vnms/nms">
    <uuid>088fbb70-40d1-4aaf-8ea3-590fd8238828</uuid>
    <name>SRVDHCPE1</name>
    <num-cpus>0</num-cpus>
    <memory-size>0</memory-size>
    <num-nics>4</num-nics>
  </appliance>
  <appliance xmlns="http://networks.com/vnms/nms">
    <uuid>088fbb70-40d1-4aaf-8ea3-590fd8238828</uuid>
    <name>SRVDHCPE2</name>
    <num-cpus>0</num-cpus>
    <memory-size>0</memory-size>
    <num-nics>4</num-nics>
  </appliance>
</collection>"""


dom = ElementTree.fromstring(t)
    for n in dom.findall("collection/appliance/name"):
        print(n.text)

查找所有名称,但未显示。我在这里做错了什么。

【问题讨论】:

标签: python xml-parsing elementtree


【解决方案1】:

你的案子肯定与Parsing XML with Namespaces有关:

dom = ET.fromstring(t)
ns = {'rest': 'http://tail-f.com/ns/rest','nms': 'http://versa-networks.com/vnms/nms'}
for n in dom.findall("nms:appliance/nms:name", ns):
    print(n.text)

输出:

SRVDHCPE1
SRVDHCPE2

【讨论】:

    【解决方案2】:

    你需要命名你的选择器:

    from xml.etree import ElementTree
    from xml.etree.ElementTree import Element
    
    t = """<collection xmlns:y="http://tail-f.com/ns/rest">
      <appliance xmlns="http://versa-networks.com/vnms/nms">
        <uuid>088fbb70-40d1-4aaf-8ea3-590fd8238828</uuid>
        <name>SRVDHCPE1</name>
        <num-cpus>0</num-cpus>
        <memory-size>0</memory-size>
        <num-nics>4</num-nics>
      </appliance>
      <appliance xmlns="http://versa-networks.com/vnms/nms">
        <uuid>088fbb70-40d1-4aaf-8ea3-590fd8238828</uuid>
        <name>SRVDHCPE2</name>
        <num-cpus>0</num-cpus>
        <memory-size>0</memory-size>
        <num-nics>4</num-nics>
      </appliance>
    </collection>"""
    
    if __name__ == '__main__':
        dom: Element = ElementTree.fromstring(t)
        namespaces = {'n': 'http://versa-networks.com/vnms/nms'}
        for name in dom.findall("./n:appliance/n:name", namespaces=namespaces):
            print(name.text)
    

    哪个打印:

    SRVDHCPE1
    SRVDHCPE2
    

    供参考:
    https://docs.python.org/3.7/library/xml.etree.elementtree.html#parsing-xml-with-namespaces

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多