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

Posted

技术标签:

【中文标题】使用python提取特定的xml标签值【英文标题】:Extracting specific xml tag value using python 【发布时间】:2016-06-10 07:22:52 【问题描述】:

我的 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'&gt;value&gt;text中提取标签值text2

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

for atype in root.findall(".//text"):
    print(atype.text)

这给了我text1text2 作为输出。其中我只需要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 作为我的输出?

【问题讨论】:

在 Python 2.7 中运行良好:eval.in/526370 我试过你的findall,它对 elementtree 和 lxml 都有效。你有一个非常古老的元素树吗? 谢谢 har07 和 tdelaney。正如你所建议的,我有一个旧版本的 elementtree。在指向更新版本的 python 之后,代码现在可以正常工作了。 【参考方案1】:

您可以使用以下示例从标签中提取文本

import xml.etree.ElementTree as ET

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

【讨论】:

【参考方案2】:

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

【讨论】:

以上是关于使用python提取特定的xml标签值的主要内容,如果未能解决你的问题,请参考以下文章

在 Python 中使用正则表达式从特定 xml 标记中提取特定值 [重复]

从值标签Etree XML python中提取文本

如何从 XML 中仅提取标签名称(而不是值),最终使用 XPath

使用 Python Etree 解析 XML 并返回指定的标签而不考虑命名空间

如何使用 PHP 从 XML“链接”标签中提取“href”属性?

使用xml标签从标签中自动提取项目名称/部件号,导出库存项目