0

编辑:

谢谢你们,我完全忘记了 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 打印第 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”的无效语法错误

有人可以帮我纠正这个吗?谢谢!

4

2 回答 2

1

text从您那里获取 Xml的替代方法。

此外,您的 Xml 格式也不像标签中spaces的那样。

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!
<<
于 2013-02-15T18:56:34.240 回答
0

您的直接问题是您缺少:for 语句

for i in xlist:

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

于 2013-02-15T18:46:04.783 回答