我有以下代码:
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>
我需要my_val
类string
才能包含
<a>hello</a>
<b>world</b>
awesome
但它显然已解决为None
答案 0 :(得分:0)
一种方法可以从获取根元素
开始from xml.etree import ElementTree
import string
tree=ElementTree.parse(file)
rootElem=tree.getroot()
然后我们可以从root获取元素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实用程序打印这些元素的方法,而不是自己格式化它们,但这应该让你开始。
答案 1 :(得分:0)
<button type="button" ng-click="edit()" >Update</button>
上的迭代将为您提供子树元素列表。
findall
这个问题是没有标签的文本被附加到前一个标签。所以你也需要清理它:
>>> elements = [ElementTree.tostring(x) for x in tree.findall('./abc/')]
['<a>hello</a>\n ', '<b>world</b>\n awesome\n ']
现在我们有一个需要展平的列表列表:
>>> 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']
答案 2 :(得分:0)
回答我自己的问题:
这可能不是最好的解决方案,但它对我有用
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()