在XML元素中打印文本节点值的Python代码
编辑:
谢谢大家,我完全忘了在for语句的末尾加上冒号。还有,我之前用空格的标签只是占位符!实际上,标签的名字是aword_anotherword。
现在如果我有这样的内容,
<TIER name="a">
<tier_1>
<tier_2>
<tier_3> a1</tier_3>
</tier_2>
</tier_1>
<tier_1>
<tier_2>
<tier_3> a2</tier_3>
</tier_2>
</tier_1>
<tier_1>
<tier_2>
<tier_3> a3</tier_3>
</tier_2>
</tier_1>
</TIER>
<TIER name="b">
<tier_1>
<tier_2>
<tier_3> b1</tier_3>
</tier_2>
</tier_1>
<tier_1>
<tier_2>
<tier_3> b2</tier_3>
</tier_2>
</tier_1>
<tier_1>
<tier_2>
<tier_3> b3</tier_3>
</tier_2>
</tier_1>
</TIER>
我该怎么做才能只打印出第一个层级中name="a"的tier_3?
我有一个像这样的xml文件
<ALL TIERS>
<tier 1>
<tier 2>
<tier 3> Hello one!</tier3>
</tier 2>
</tier 1>
<tier 1>
<tier 2>
<tier 3> Hello two!</tier3>
</tier 2>
</tier 1>
<tier 1>
<tier 2>
<tier 3> Hello three!</tier3>
</tier 2>
</tier 1>
</ALL TIERS>
我想用python打印出所有tier 3的文本节点值,结果应该是这样的:
你好,第一! 你好,第二! 你好,第三!
我写了这个:
from xml.dom import minidom
xmldoc = minidom.parse(sys.argv[1])
xlist = xmldoc.getElementsByTagName('tier 3')
for i in xlist
print " ".join(t.nodeValue for t in i.childNodes if t.nodeType==t.TEXT_NODE)
但这给我报了一个无效语法的错误,指向“for i in xlist”。
有人能帮我纠正一下吗?谢谢!
2 个回答
1
这里有一个获取你Xml中text
的替代方法。
另外,你的Xml格式不太正确,因为标签里面有空格。
import xml.etree.ElementTree as ET
txt = """<ALL-TIERS>
<tier-1>
<tier-2>
<tier-3> Hello one!</tier-3>
</tier-2>
</tier-1>
<tier-1>
<tier-2>
<tier-3> Hello two!</tier-3>
</tier-2>
</tier-1>
<tier-1>
<tier-2>
<tier-3> Hello three!</tier-3>
</tier-2>
</tier-1>
</ALL-TIERS>
"""
root = ET.fromstring(txt)
for e in root.iter('ALL-TIERS'):
print ">>"
print ET.tostring(e, method="text").strip()
print "<<"
for e in root.iter('tier-3'):
print ">>"
print ET.tostring(e, method="text").strip()
print "<<"
结果是:
>>
Hello one!
Hello two!
Hello three!
<<
>>
Hello one!
<<
>>
Hello two!
<<
>>
Hello three!
<<
0
你现在遇到的问题是,for语句后面缺少了一个:
符号。
for i in xlist:
你还需要import sys
,另外你的XML格式不太正确,可能需要把<ALL TIERS>
改成<ALL_TIERS>
?(你也需要把结束标签改一下。)