如何在Python中获取XML根元素的内容?

时间:2011-07-12 18:47:04

标签: python xml

我有一个XML文件,例如:

<?xml version="1.0" encoding="UTF-8"?>
<root>
    First line. <br/> Second line.
</root>

作为我希望获得的输出:'\nFirst line. <br/> Second line.\n' 我只想注意,如果根元素包含其他嵌套元素,则应按原样返回。

2 个答案:

答案 0 :(得分: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>)包含任何属性,它会失败。

更新:此方法还有另一个问题。由于lstriprstrip匹配给定字符的任意组合,您可能会面临此类问题:

# 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文档。

答案 1 :(得分: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