Строковые операции на узлах xml в Python - PullRequest
0 голосов
/ 14 ноября 2011

Я читаю 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

Как я могу разобратькаждый узел и выполнить некоторые строковые операции на каждом из них .?

1 Ответ

2 голосов
/ 14 ноября 2011

Вы написали 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.Если вы хотите текстовый атрибут, просто используйте a.text.

...