2010-03-06 159 views
1

我有以下代碼。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庫,它會很棒。

感謝 巴拉

回答

1

什麼是可能發生的事情是,你正在運行到包含您的標籤之間的空白節點。目前尚不清楚你想要做什麼,但如果你只是刪除source.nodeType == source.ELEMENT_NAME部分,它可能會起作用。

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