如何使用 Python 从 API 响应中提取特定的 XML 行

How to Extract Specific XML lines from an API response using Python

我有一个连接到 API 的项目,它在 XML 中输出数据。我可以抓取标签的值并将它们打印出来,但我想抓取 XML 中的整行特定行并将其写到 XML 文件中。在 Python 中执行此操作的最佳方法是什么?我真的没有任何代码可以分享,因为我不确定如何编写它。

这是 XML 文件或 api 给出的输出的示例:

<?xml version="1.0" ?>
<Product ParentID="XXX" ID="XXX" title="XXX">   
    <Values>
        <Value AttributeID="ABC" title="ABC1">ABC</Value>
        <Value AttributeID="DEF" title="DEF1">DEF</Value>
        <Value AttributeID="GHI" title="GHI1">GHI</Value>
    </Values>
</Product>

我想将 xml 文件写成这样:

<?xml version="1.0" ?>
<Product ParentID="XXX" ID="XXX" title="XXX">   
    <Values>
        <Value AttributeID="ABC" title="ABC1">ABC</Value>
        <Value AttributeID="GHI" title="GHI1">GHI</Value>
    </Values>
</Product>

根据我的经验,我总是使用某种解析器来解析文本并将其保存为一个对象,其属性可以像任何其他数组或列表一样访问。

这是一个 link 到 python 3 的 xml 元素树解析器,它将根据您的 xml 输入创建一个可以使用索引或字符串访问的对象键。

https://docs.python.org/3/library/xml.etree.elementtree.html

希望本文和示例对您有所帮助!

您可以使用带 xpath 的 lxml 到达那里:

from lxml import etree
products = """[your xml above]"""

doc = etree.XML(products)
values = doc.xpath('//Value')
for value in values:
    if value.text!="ABC" and value.text!="GHI":
    #alternatively:
    if value.text=="DEF":
        value.getparent().remove(value)
print(etree.tostring(doc).decode())

输出:

<Product ParentID="XXX" ID="XXX" title="XXX">   
    <Values>
        <Value AttributeID="ABC" title="ABC1">ABC</Value>
        <Value AttributeID="GHI" title="GHI1">GHI</Value>
    </Values>
</Product>