gpt4 book ai didi

java - 在 xpath 中使用 "ancestor"和相对路径

转载 作者:行者123 更新时间:2023-12-02 09:02:38 25 4
gpt4 key购买 nike

我有一个类似于

的 xml
<Employees>
<Employee>
<GenericData>
<Data>
<ID>1</ID>
<Name>ABC</Name>
</Data>
</GenericData>
<DepartmentData>
<SubDepartment>
<DeptID>12</DeptID>
<DeptName>IT</DeptName>
</SubDepartment>
</DepartmentData>
</Employee>
<Employee>
<GenericData>
<Data>
<ID>1</ID>
<Name>XYZ</Name>
</Data>
</GenericData>
<DepartmentData>
<SubDepartment>
<DeptID>13</DeptID>
<DeptName>HR</DeptName>
</SubDepartment>
</DepartmentData>
</Employee>
</Employees>

我的问题是根据名称获取 DeptID。我可以使用以下方法获取相同的内容:

//Data/Name[text()="ABC"]/ancestor::Employee/DepartmentData/SubDepartment/DeptName/text()

需要一个解决方案来在祖先之后使用相对路径,例如:

//Data/Name[text()=\"ABC\"]/ancestor::Employee/*/DeptName/text()

使用 * 删除 DepartmentData/SubDepartment,即使用相对路径。

注意:我的实际 xml 太复杂,编写整个路径是不可行的。非常感谢任何帮助。

最佳答案

您需要在作为名称和 ID 的共享祖先的最低节点上设置谓词,并从那里访问目标数据:

/Employees/Employee[./GenericData/Data/Name/text() = "ABC"]/DepartmentData/SubDepartment/DeptID/text()

这会查找员工,仅保留具有相关名称的员工,然后提取他们的 DeptID。

这不需要完整路径,例如如果需要,您可以使用 //Employee 。也就是说,使用 // 会对性能产生重大影响,但很少需要使用。

关于java - 在 xpath 中使用 "ancestor"和相对路径,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60058470/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com