1

我有以下非常简单的 XML 文件,我想使用 minidom 快速解析每个设备的 imsi 元素。

    <device>
      <imsi>01010101</imsi>  
    </device>
    <device>
      <imsi>123456</imsi>
    </device>
    <device>
      <imsi>9876543</imsi>
    </device>

    --------------------------
    CODE SNIPPET FOR PARSING
    --------------------------

    doc = xml.dom.minidom.parse("./input.xml")

    for node in doc.getElementsByTagName("device"):
          imsi = node.getElementsByTagName("imsi")
          print str(imsi)

当我执行上面的代码片段时,我在终端中收到以下错误。您认为我应该对上述代码进行哪些改进来解析每个设备的 imsi 元素?谢谢。

doc = xml.dom.minidom.parse("./input.xml")
File "/usr/lib/python2.6/site-packages/_xmlplus/dom/minidom.py", line 1915, in parse
return expatbuilder.parse(file)
File "/usr/lib/python2.6/site-packages/_xmlplus/dom/expatbuilder.py", line 926, in parse
result = builder.parseFile(fp)
File "/usr/lib/python2.6/site-packages/_xmlplus/dom/expatbuilder.py", line 207, in  parseFile
parser.Parse(buffer, 0)
xml.parsers.expat.ExpatError: junk after document element: line 4, column 0

在我介绍了一个根节点之后,我编写了以下代码,最终得到了一个奇怪的输出。你觉得这里有什么问题?

     doc = xml.dom.minidom.parse("./input.xml") 
     for node in doc.getElementsByTagName("device"):
         imsi = node.getElementsByTagName("imsi") 
         print str(imsi) 

    [<DOM Element: imsi at 0x828636c>] 
    [<DOM Element: imsi at 0x82864ac>]  
    [<DOM Element: imsi at 0x828660c>] 

以下代码解决了我的问题并正确打印了 IMSI 元素:

    for node in doc.getElementsByTagName("device"):
        imsi = node.getElementsByTagName("imsi")
        for a in imsi:
                Title= a.firstChild.data
                print Title
4

2 回答 2

2

您的示例不是有效的 XML 文档,因为它没有根节点。插入一个得到类似的东西

<devices>
  <device>
    <imsi>01010101</imsi>  
  </device>
  <device>
    <imsi>123456</imsi>
  </device>
  <device>
    <imsi>9876543</imsi>
  </device>
</devices>
于 2012-01-24T14:23:02.703 回答
1

您的 xml 无效。在您的 xml 中插入一个根节点。

您可以在此处检查有效性W3C Markup Validator

<document>
    <device>
      <imsi>01010101</imsi>  
    </device>
    <device>
      <imsi>123456</imsi>
    </device>
    <device>
      <imsi>9876543</imsi>
    </device>
</document>

如果您希望您的 xml 完全有效,而不是添加document type declaration到其中。

于 2012-01-24T14:25:45.853 回答