python-3.x - 如何使用 Python 从 API 响应中提取特定的 XML 行
问题描述
我有一个项目,我连接到一个以 XML 格式输出数据的 API。我可以获取标签的值并将其打印出来,但想要获取 XML 中特定行的整行并将其写入 XML 文件。在 Python 中执行此操作的最佳方法是什么?我真的没有任何代码可以分享,因为我不确定如何写这个。
以下是 api 给出的 XML 文件或输出的示例:
<?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>
解决方案
您可以使用带有 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>
推荐阅读
- amazon-web-services - 无法删除 VM Manager 检查点 AWS 服务器迁移服务
- java - notifyDataSetChanged ListView 适配器文件中的错误
- bash - Bash 通过 Netcat 上传文件
- android - 无法从 Play 商店安装应用程序
- python - Logistic 回归的 Theta 问题
- vmware - 在 ESXi 6.0 下虚拟化 ESXi 6.7
- git - Go + VsCode:Git -> 权限被拒绝(公钥)
- java - java中构造TreeSet时没有定义类型参数怎么办?
- winapi - 我什么时候应该同时写 'winuser.h' 和 'windows.h' 标题?
- javascript - 随机运行函数次数