我有一个XML文件,例如:
<?xml version="1.0" encoding="UTF-8"?>
<root>
First line. <br/> Second line.
</root>
作为我希望获得的输出:'\nFirst line. <br/> Second line.\n'
我只想注意,如果根元素包含其他嵌套元素,则应按原样返回。
答案 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>
)包含任何属性,它会失败。
更新:此方法还有另一个问题。由于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文档。
答案 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