python在xml元素中打印文本节点值

时间:2013-02-15 18:33:26

标签: python xml dom nodevalue

编辑:

谢谢你们,我完全忘记了:在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>

我如何才能从名为“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打印allo f 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 个答案:

答案 0 :(得分:1)

从Xml获取text的替代方法。

此外,由于标签中包含 spaces ,因此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!
<<

答案 1 :(得分:0)

您当前的问题是您错过了for for statement上的:

for i in xlist:

您还想要import sys并且您的XML格式不正确,可能使用<ALL_TIERS>而不是<ALL TIERS>? (你也想改变结束标签。)