Python lxml通过id标签查找元素

2024-01-11

我正在开发一个 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 是我们用于库存的条形码中的编号。

到目前为止,我希望我的程序使用以下步骤:

  1. 检查 id 是否存在(id 值是我的 python 程序中从 txt 文件中的内容通过管道传输的变量)

  2. 将 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(使用前将#替换为@)

Python lxml通过id标签查找元素 的相关文章

随机推荐

  • 在互操作 C# 期间延迟 Excel 计算

    我必须从 C 程序将数百个单元格输入到 Excel 工作表中 每次我设置一个单元格或一个范围时 Excel都会缓慢响应 大概是在我添加的每个输入之间更新各种输出 有没有办法禁用我的 C 程序的计算 并在完成设置单元格并准备好读取输出后重新启
  • LINQ 有条件添加联接

    我有一个 LINQ 查询 我试图从 2 个表返回数据 但我加入的表是有条件的 这就是我想做的 if teamType A var query from foo in context People join foo2 in context P
  • 在运行时请求管理员权限

    如何在运行时请求管理员权限 以便提示用户允许或禁止 如果您希望它响应按钮 例如 像任务管理器中的 显示所有用户的进程 您必须使用以下方法重新启动您的应用程序 ShellExecute 0 L runas exepath 0 0 SW SHO
  • 如何使用 Visual Studio 为 .net Framework 4.7.2 项目创建 SDK 样式项目?

    我运行的是最新版本的VS2019 16 6 1 然而 Windows 类库的新项目向导仍然创建旧样式的项目 我想用这个方法研究这个问题 https stackoverflow com questions 62251125 target v4
  • 如何使我的本地主机可通过互联网访问

    我在本地计算机上的 JBoss 上托管了一个应用程序 我也可以通过 localhost 或通过我的 IP 访问 现在我希望其他用户可以通过我的 IP 通过互联网访问同一个应用程序 您能让我知道如何配置 JBoss 来处理这些请求吗 http
  • 无法从 WinApi 箱调用 CryptDecrypt,因为它找不到模块

    In the 文档 https docs rs winapi x86 64 pc windows msvc winapi um wincrypt fn CryptDecrypt html它说该函数位于winapi um wincrypt C
  • 如何将 tr 附加到表格顶部

    我如何将新的 tr 附加到表格顶部而不是其他 tr 下 Example table width 100 tr td something td td else here td tr tr td something2 td td else he
  • scala中基于相邻元素之间差异的拆分列表

    我们如何根据相邻元素之间的差异在 scala 中拆分列表 例如 给定 List 1 3 6 10 12 14 和差值 3 该函数将返回 List List 1 3 List 6 List 10 12 14 我们可以使用foldLeft 来做
  • 如何为 Android 中单击的图像按钮制作边框?

    我正在使用 Imagebuttons 在我的 android 项目中显示一些图标
  • 值不能为 null 或为空。\r\n参数名称: name

    当我进入 cshtml 页面时出现此错误 System Web Mvc dll 中发生 System ArgumentException 类型的异常 但未在用户代码中处理 在我的 cshtml 代码中 div class form grou
  • 基于“附近”行值聚合

    我有一个非常混乱的数据框 网络抓取 不幸的是其中有许多双重甚至三重条目 大多数数据框如下所示 gt df1 lt data frame var1 c a a b b c c d d var2 c right a NA right b NA
  • 更新 SQL 中的多列

    有没有办法像使用插入语句一样更新 SQL Server 中的多个列 就像是 Update table1 set a b c d e f g h i j k t2 a t2 b t2 c t2 d t2 e t2 f t2 g t2 h t2
  • 如何获取 dotnet core 3 的路由属性?

    我已将 dotnet core 2 2 升级到 3 preview 7 所以在那之后 我无法获得自定义属性 context Resource在 2 2 版本中是类型AuthorizationFilterContext 但在版本 3 中是类型
  • 在 Angular 2 中使用 http.get() 从本地文件加载 JSON 内容

    我正在尝试加载本地 JSON 文件http get 在 Angular 2 中 我尝试了在 Stack Overflow 上找到的一些东西 它看起来像这样 这是我的app module ts我在哪里import the HttpModule
  • 如何使用python访问local.setting.json数据库连接字符串

    我的本地 Azure 函数中有这个 local settings json Http 触发 IsEncrypted false Values AzureWebJobsStorage FUNCTIONS WORKER RUNTIME pyth
  • ModelState.IsValid 的作用是什么?

    当我执行创建方法时 我将对象绑定在参数中 然后检查是否ModelState是有效的 所以我添加到数据库 但是当我需要在添加到数据库之前更改某些内容时 在更改它之前 ModelState无效 所以我必须这样做 为什么模型状态仍然无效 这个函数
  • 交叉引用和标题在 Rmd 文件中不起作用

    谁能帮助我理解如何编写标题 以便图形标题和交叉引用有效 我正在练习为 Rmd 文件中的简单绘图制作标题和交叉引用 我知道要做到这一点 我应该添加到我的标题中 output bookend pdf document2 和 fig captio
  • RoR 中 <% %> 和 <%= %> 之间的差异[重复]

    这个问题在这里已经有答案了 有什么区别 and in RoR 可以这样想 and 因此 例如您可以这样做 The current value is
  • 如何更改 Rails 中的“3 个错误禁止保存此 foobar”验证消息?

    在我的 Rails 应用程序中 我在活动记录对象中使用验证助手 它们非常棒 当出现问题时 我会在网页上看到标准的 3 个错误禁止保存此 foobar 以及各个问题 有什么方法可以用我自己的消息覆盖此默认消息吗 The error messa
  • Python lxml通过id标签查找元素

    我正在开发一个 python 程序来保存储藏室的库存 在 XML 文档中 将保留碳粉量 我希望我的 python 程序能够添加 删除和显示不同打印机和不同颜色的碳粉量 我的 XML 看起来像这样