我正在开发一个 python 程序来保存储藏室的库存。在 XML 文档中,将保留碳粉量,我希望我的 python 程序能够添加、删除和显示不同打印机和不同颜色的碳粉量。
我的 XML 看起来像这样:
<?xml version="1.0"?>
<printer>
<t id="095205615111"> <!-- 7545 Magenta -->
<toner>7545 Magenta Toner</toner>
<amount>3</amount>
</t>
<t id="095205615104"> <!-- 7545 Yellow -->
<toner>7545 Yellow Toner</toner>
<amount>7</amount>
</t>
</printer>
ID 是我们用于库存的条形码中的编号。
到目前为止,我希望我的程序使用以下步骤:
检查 id 是否存在(id 值是我的 python 程序中从 txt 文件中的内容通过管道传输的变量)
将 xml 文档中的 amount 值更改为 +1 或 -1
无论我尝试什么,它都不会完全起作用。您对我可以使用什么有什么建议吗?
检查id是否存在
您可以通过构造 XPath 表达式检查@id
属性值。
将 xml 文档中的 amount 值更改为 +1 或 -1
一旦您找到t
节点由特定id
, 您可以使用find()
来定位内部amount
节点。然后,您可以获得.text
,将其转换为整数,更改它,转换回字符串并设置.text
财产。
工作示例:
from lxml import etree
data = """<?xml version="1.0"?>
<printer>
<t id="095205615111"> <!-- 7545 Magenta -->
<toner>7545 Magenta Toner</toner>
<amount>3</amount>
</t>
<t id="095205615104"> <!-- 7545 Yellow -->
<toner>7545 Yellow Toner</toner>
<amount>7</amount>
</t>
</printer>"""
root = etree.fromstring(data)
toner_id = "095205615111"
# find a toner
results = root.xpath("//t[@id = '%s']" % toner_id)
if not results:
raise Exception("Toner does not exist")
toner = results[0]
# change the amount
amount = toner.find("amount")
amount.text = str(int(amount.text) + 1)
print(etree.tostring(root))
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)