【问题标题】:Python minidom: list childnode attributes per parent tagPython minidom:列出每个父标签的子节点属性
【发布时间】:2012-08-02 06:19:46
【问题描述】:

我有,

<parent id="1">
    <child id="white"></child>
    <child id="red"></child>
</parent>
<parent id="2">
    <child id="green"></child>
    <child id="gray"></child>
</parent>

我需要这个输出,

1 
 white
 red
2
 green
 gray

这就是我的做法,

parent = xmldoc.getElementsByTagName('parent')
for item in parent:
    child = xmldoc.getElementsByTagName('child')
    child_id = child.getAttribute('id')
    for child_id in child:
        print child_id

当然,我弄错了,但不知道如何遍历这些父 ID 并单独收集每个列表。我将不胜感激!

【问题讨论】:

    标签: python list for-loop attributes minidom


    【解决方案1】:

    试试这个

    import xml.dom.minidom as minidom
    
    a = '<parent id="1"><child id="white"></child><child id="red"></child></parent>'
    dom = minidom.parseString(a)
    
    for parent in dom.childNodes:
        print parent.getAttribute('id')
        for child in parent.childNodes:
            print '  %s' % child.getAttribute('id')
    

    【讨论】:

    • 我收到一个错误,“文本实例没有属性,'getAttribute'”
    • 可能您正在运行的 xml 字符串格式错误。尝试将整个字符串放在 1 行,看看会发生什么。但想法还是一样的:)
    • 是的,我意识到您的代码有效。但是,当我重复父标签块时,它会中断。与其他代码相同。我正在从文件中解析。我无法控制输入文件。它有重复,没有缩进。这是一种痛苦。
    • 那是因为你的xml字符串没有根标签。在使用 parseString 之前,您应该添加另一个根标签以使 xml 字符串有效(a = '...xml string ...'; a = '' + a + '')跨度>
    • Thai Tran,tks。终于找到了。我会牢记你的未来,感谢它。
    【解决方案2】:

    因为你在猜测代码和语法:

    import xml.dom.minidom
    
    s =  """<?xml version="1.0"?>
    <container>
    <parent id="1">
        <child id="white"></child>
        <child id="red"></child>
    </parent>
    <parent id="2">
        <child id="green"></child>
        <child id="gray"></child>
    </parent>
    </container>
    """
    
    
    xmldoc = xml.dom.minidom.parseString(s)
    
    parent = xmldoc.getElementsByTagName('parent')
    for item in parent:
        print item.getAttribute('id')
        for child in item.getElementsByTagName('child'):
            print child.getAttribute('id')
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-08-24
      • 2012-09-22
      相关资源
      最近更新 更多