【问题标题】:python print text node value in xml element [closed]python在xml元素中打印文本节点值[关闭]
【发布时间】:2013-02-15 18:33:26
【问题描述】:

编辑:

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

我想打印第 3 层的文本节点值,使用 python 所以结果是这样的

你好!两位好!你好三!

这是我写的:

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”的无效语法错误

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

【问题讨论】:

  • for i in xlist 应该是for i in xlist: 请务必主动查看 Python 文档。它真的很棒,很多优秀的人为你付出了很多努力。
  • 天哪,我完全忘记了...谢谢!我会阅读更多内容!
  • 这不是有效的 XML:&lt;ALL TIERS&gt; 这真的是您的文档吗?

标签: python xml dom nodevalue


【解决方案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!
<<

【讨论】:

  • 哦,嗯,我想你回答了我编辑的问题。谢谢!
【解决方案2】:

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

for i in xlist:

您还想要import sys,但您的XML 格式不正确,也许使用&lt;ALL_TIERS&gt; 而不是&lt;ALL TIERS&gt;? (您也想更改结束标签。)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-03-23
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多