2011-11-14 62 views
0

我正在讀取一個xml文件,並且想要對節點的內容執行字符串操作。Python中xml節點上的字符串操作

import os 
import elementtree.ElementTree as ET 
from xml.etree.ElementTree import ElementTree 
from xml.etree.ElementTree import tostring 

xml_file = os.path.abspath(__file__) 
xml_file = os.path.dirname(xml_file) 
xml_file = os.path.join(xml_file, "Small1Review.xml") 
print xml_file 

root = ET.parse(xml_file).getroot() 
text = tostring(root) 
#print text 

for a in text: 
    #print a, "-->", a.text 
    text = tostring(a) 
    print text 

但代碼提供了以下錯誤,

Traceback (most recent call last): 
    File "myEtXML.py", line 33, in <module> 
    text = tostring(a) 
    File "C:\Python26\lib\xml\etree\ElementTree.py", line 1009, in tostring 
    ElementTree(element).write(file, encoding) 
    File "C:\Python26\lib\xml\etree\ElementTree.py", line 543, in __init__ 
    assert element is None or iselement(element) 
AssertionError 

我如何解析每個節點和每個人進行一些字符串操作?

回答

2

您已經編寫for a in text,但text是一個字符串,您將它視爲XML節點。

tostring方法需要etree.Element,但在這種情況下,a是字符串text的一個字符。

如果要遍歷樹,只把它作爲一個列表

root = ET.parse(xml_file).getroot() 
for child in root: 
    print tostring(child) 

而且,您的評論#print a, "-->", a.text似乎表明,你希望你的節點的text屬性。這不是tostring方法返回的結果。 tostring方法接受一個節點並從中創建一個XML樣式字符串。如果你想要text屬性,只需使用a.text