繁体   English   中英

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

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM