使用python提取特定的xml标记值

2024-05-01 21:51:55 发布

您现在位置:Python中文网/ 问答频道 /正文

我有如下XML数据:

    <root>
      <results preview='0'>
        <meta>
          <fieldOrder>
        <field>title</field>
        <field>search</field>
          </fieldOrder>
        </meta>
        <messages>
          <msg type="DEBUG">msg1</msg>
          <msg type="DEBUG">msg2</msg>
        </messages>
        <result offset='0'>
          <field k='title'>
        <value>
          <text>text1</text>
        </value>
          </field>
          <field k='search'>
        <value>
          <text>text2</text>
        </value>
          </field>
        </result>
      </results>
    </root>

我想从标记k='search'>value>text中提取标记值text2。在

在我的代码中,我尝试以下操作:

^{pr2}$

这给了我text1和{}作为输出。我只需要text2。我可以在我的程序中处理这个问题,让一个if语句只过滤text2值,但我想在findall()中找到一种更健壮的方法来实现这一点。在

我尝试使用这段代码来专门提取text2作为输出。在

for atype in root.findall(".//field[@k='search']//text"):
    print(atype.text)

但这给了我一个错误-

File "command_curl", line 49, in <module>
for atype in root.findall(".//field[@k='search']//text"):
File "/usr/lib64/python2.6/xml/etree/ElementTree.py", line 355, in findall
return ElementPath.findall(self, path)
File "/usr/lib64/python2.6/xml/etree/ElementPath.py", line 198, in findall
return _compile(path).findall(element)
File "/usr/lib64/python2.6/xml/etree/ElementPath.py", line 176, in _compile
p = Path(path)
File "/usr/lib64/python2.6/xml/etree/ElementPath.py", line 93, in __init__
"expected path separator (%s)" % (op or tag)
SyntaxError: expected path separator ([)

我应该做些什么来只得到text2作为我的输出?在


Tags: pathtextinfieldsearchvalueusrline
2条回答

谢谢har07和tdelaney。我有一个你提到的旧版本的elementtree。在指向一个更新版本的python之后,代码现在可以正常工作了。在

您可以使用下面的示例从标记中提取文本

import xml.etree.ElementTree as ET

tree = ET.parse("sample.xml")
root = tree.getroot()
for tags in root.findall(".//text"):
    print(tags.text)

相关问题 更多 >