Python XML需要帮助编程错误

时间:2010-03-06 01:43:03

标签: python xml

我有以下代码。

import xml.dom.minidom

def get_a_document(name):
    return xml.dom.minidom.parse(name)

doc = get_a_document("sources.xml")

sources = doc.childNodes[1]

for e in sources.childNodes:
    if e.nodeType == e.ELEMENT_NODE and e.localName == "source":
            for source in e.childNodes:
                    print source.localName
                    print source.nodeType
                    if source.nodeType == source.ELEMENT_NAME and source.localName == "language":
                            print source.localName
            country = doc.createElement("country")
            e.appendChild(country)

我正在尝试阅读sources.xml并添加一个元素国家/地区。但是,我收到以下错误。

AttributeError: Text instance has no attribute 'ELEMENT_NAME'

Sources.xml看起来像这样:

<?xml version="1.0" encoding="utf-8"?>
<!--sources.xml for multilingual, follows an ID range for different type of sources. Dailies sources are merged to this list-->
    <sources xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
    <source>
    <id>1005001</id>
    <language>Afar</language>
    <status>active</status>
    <tags>
      <tag>language</tag>
    </tags>
    <title>Afar</title>
    </source>
    </sources>

有人还可以为minidom库提供一个很好的教程。另外,如果你可以建议一个更好的python xml库,它会很棒。

由于 巴拉

2 个答案:

答案 0 :(得分:1)

您可能正在遇到包含标记之间空白的节点。目前尚不清楚您要尝试做什么,但如果您只删除source.nodeType == source.ELEMENT_NAME部分,则可能会有效。

答案 1 :(得分:1)

[DOM文本节点“u'\ n'”,DOM元素:源位于0x709f80,DOM文本节点“u'\ n'”]

使用xml.dom.minidom库时,每个新行都被视为一个单独的子实体。不幸的是,这些新行不包含值e.ELEMENT_NAME值。看来你已经意识到了这一点,但最终的问题是你的意思是e.ELEMENT_NODE而不是e.ELEMENT_NAME

for e in sources.childNodes:
 if e.nodeType == e.ELEMENT_NODE and e.localName == "source":
         for source in e.childNodes:
                 if source.nodeType == e.ELEMENT_NODE and source.localName == "language":
                         print source.localName
                         print source.nodeType
                         print source.localName
         country = doc.createElement("country")
         e.appendChild(country)

干杯, [R