Python XML:如何将节点内容视为字符串?

时间:2017-04-12 09:37:07

标签: python xml

我有以下代码:

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_valstring才能包含

<a>hello</a>
<b>world</b>
awesome

但它显然已解决为None

3 个答案:

答案 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()