[英]Python XML: how to treat a node content as a string?
我有以下代码:
from xml.etree import ElementTree
tree = ElementTree.parse(file)
my_val = tree.find('./abc').text
这是一个xml片段:
<item>
<abc>
<a>hello</a>
<b>world</b>
awesome
</abc>
</item>
我需要包含string
类型的my_val
<a>hello</a>
<b>world</b>
awesome
但它显然解决为None
一种方法可能是从获取根元素开始
from xml.etree import ElementTree
import string
tree=ElementTree.parse(file)
rootElem=tree.getroot()
然后,我们可以从根获取abc元素并对其子元素进行迭代,并使用子元素的属性将其格式化为字符串:
abcElem=root.find("abc")
my_list = ["<{0.tag}>{0.text}</{0.tag}>".format(child) for child in abcElem]
my_list.append(abcElem.text)
my_val = string.join(my_list,"\n")
我确信其他一些乐于助人的人知道一种使用ElementTree或其他xml实用程序将这些元素打印出来的方法,而不是自己格式化它们,但这应该会让您开始。
在findall
迭代将为您提供子树元素的列表。
>>> elements = [ElementTree.tostring(x) for x in tree.findall('./abc/')]
['<a>hello</a>\n ', '<b>world</b>\n awesome\n ']
问题是没有is标签的文本将附加到先前的标签上。 因此,您也需要清理它:
>>> split_elements = [x.split() for x in elements]
[['<a>hello</a>'], ['<b>world</b>', 'awesome']]
现在,我们有一个列表需要平整:
>>> from itertools import chain
>>> flatten_list = list(chain(*split_elements))
['<a>hello</a>', '<b>world</b>', 'awesome']
最后,您可以使用以下命令每行打印一次:
>>> print("\n".join(flatten_list))
回答我自己的问题:
这可能不是最佳解决方案,但对我有用
my_val = ElementTree.tostring(tree.find('./abc'), 'utf-8', 'xml').decode('utf-8')
my_val = my_val.replace('<abc>', '').replace('</abc>', '')
my_val = my_val.strip()
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.