如何在Python中获取XML根元素的内容?
我有一个XML文件,比如:
<?xml version="1.0" encoding="UTF-8"?>
<root>
First line. <br/> Second line.
</root>
我想要的输出是:'\n第一行。 <br/> 第二行。\n'
。我想说明的是,如果根元素里面还有其他嵌套的元素,它们应该保持原样返回。
2 个回答
0
从文件中解析:
from xml.etree.ElementTree import parse
tree = parse('yourxmlfile.xml')
print tree.getroot().text
从字符串中解析:
from xml.etree.ElementTree import fromstring
print fromstring(yourxmlstr).text
3
我想到的第一个方法是:
from xml.etree.ElementTree import fromstring, tostring
source = '''<?xml version="1.0" encoding="UTF-8"?>
<root>
First line.<br/>Second line.
</root>
'''
xml = fromstring(source)
result = tostring(xml).lstrip('<%s>' % xml.tag).rstrip('</%s>' % xml.tag)
print result
# output:
#
# First line.<br/>Second line.
#
但是这个方法并不是完全通用的,因为如果根元素(<root>
)里面有任何属性,它就会失效。
更新:这个方法还有另一个问题。因为 lstrip
和 rstrip
可以匹配给定字符的任何组合,所以你可能会遇到这样的情况:
# input:
<?xml version="1.0" encoding="UTF-8"?><root><p>First line</p></root>
# result:
p>First line</p
如果你真的只需要开闭标签之间的字面字符串(就像你在评论中提到的),你可以使用这个:
from string import index, rindex
from xml.etree.ElementTree import fromstring, tostring
source = '''<?xml version="1.0" encoding="UTF-8"?>
<root attr1="val1">
First line.<br/>Second line.
</root>
'''
# following two lines are needed just to cut
# declaration, doctypes, etc.
xml = fromstring(source)
xml_str = tostring(xml)
start = index(xml_str, '>')
end = rindex(xml_str, '<')
result = xml_str[start + 1 : -(len(xml_str) - end)]
这不是最优雅的方法,但与之前的方法不同,它可以正确处理开标签中的属性,以及任何有效的 XML 文档。