xpath - 所有具有不同名称的子节点的 XPATH
问题描述
我有一个包含各种子元素的父元素,我需要对其进行计数。我遇到的问题是每个子元素的名称不同,所以每次我使用 count(*) 时,编号都会重新开始。我需要编号去 1.1, 1.2, 1.3...
父标签是<application>
1、1.1、1.2和1.3<ident>
<kitapplic>
<tctoproof>
我以为我可以做一个 count(child::application) 但这不起作用。感谢您的帮助。
<application>
<ident>
<para>This Technical Order is applicable.</para>
</ident>
<kitapplic>
<kitapptbl>
<kitapptblrow>
<model>Model</model>
<serialno>Serial Number</serialno>
<kitno>Kit Required</kitno>
</kitapptblrow>
</kitapptbl>
</kitapplic>
<tctoproof>
<para>Time Compliance Technical Order (TCTO) verification, in accordance
with TO 00-5-15, was accomplished 28 August 2019 at Nellis Air Force
Base with GCS serial number 5147.</para>
</tctoproof>
</application>
解决方案
使用 XPath,您可以使用count
preceding-sibling
和concat
来获得所需的数字。示例kitapplic
:
concat("1.",count(application/kitapplic/preceding-sibling::*)+1)
输出 :1.2
如果您需要一个包含 1.1、1.2、1.3 的列表,您可以为应用程序元素的每个子项创建一个列表(Python 中的示例):
data = """<application>
<ident>
<para>This Technical Order is applicable.</para>
</ident>
<kitapplic>
<kitapptbl>
<kitapptblrow>
<model>Model</model>
<serialno>Serial Number</serialno>
<kitno>Kit Required</kitno>
</kitapptblrow>
</kitapptbl>
</kitapplic>
<tctoproof>
<para>Time Compliance Technical Order (TCTO) verification, in accordance
with TO 00-5-15, was accomplished 28 August 2019 at Nellis Air Force
Base with GCS serial number 5147.</para>
</tctoproof>
</application>"""
import lxml.html
tree = lxml.html.fromstring(data)
for el in tree.xpath("//application/*"):
print(el.xpath("concat(name(.),' 1.',count(./preceding-sibling::*)+1)"))
输出 :
ident 1.1
kitapplic 1.2
tctoproof 1.3
推荐阅读
- r - 在 R 编程中找到最大平均误差
- c++ - C++:切片时迭代器的约定,尤其是访问最后一个元素并最终删除它
- node.js - 将 node.js 中的数据添加到 Google BigQuery 表
- r - 我无法在 R 中使用 One Class 生成分类的混淆矩阵
- java - 有目的的编程 Coursera 课程的编程作业帮助
- c# - 防止用户检查 listView .NET 的项目
- c# - 动画帮助/动画师
- powershell - 如何导入包(不是模块)?
- javascript - 定义新任务而不是直接调用 await 会更好吗?
- javascript - 错误设备:(55:37)未定义不是对象(评估'_this.user.length')