xml - xapth - 按属性获取不同的节点
问题描述
我有以下xml:
<RD>
<C id="1" pna="00-002" value="value1" />
<C id="7" pna="00-008" value="value2"/>
<C id="8" pna="00-009" value="value3"/>
<C id="9" pna="00-009" value="value4"/>
<C id="10" pna="00-010" value="value5"/>
<C id="26" pna="00-025" value="value6"/>
<C id="27" pna="00-026" value="value7"/>
<C id="28" pna="00-026" value="value8"/>
<C id="29" pna="00-026" value="value9"/>
<C id="30" pna="00-026" value="value10"/>
<C id="31" pna="00-027" value="value11"/>
</RD>
我只想通过属性 pna 获得不同的节点。示例结果:
<C id="1" pna="00-002" value="value1" />
<C id="7" pna="00-008" value="value2"/>
<C id="8" pna="00-009" value="value3"/>
<C id="10" pna="00-010" value="value5"/>
<C id="26" pna="00-025" value="value6"/>
<C id="27" pna="00-026" value="value7"/>
<C id="31" pna="00-027" value="value11"/>
我可以使用这个 xpath 来获取不同的值: distinct-values(/RD/C/@pna) ,但我想获取节点,而不是值。
设想:
- 通过属性 pna 获取不同的值(例如:使用 distinct-values())
- 遍历不同的值列表并在 xml 节点(第一个或最后一个节点,无关紧要)中查找,该 pna 属性与迭代器具有相同的值
请注意,我不能使用following-sibling 或previous-sibling 函数,因为属性pna 的相同值可能出现2 次以上。是否可以在纯 xpath 中做到这一点,而不使用任何编程语言?
解决方案
Your XPath would be /RD/C[not(./@pna = following::C/@pna)]
.
See test here.
推荐阅读
- database - 如何在 Oracle 数据库中添加默认空值
- qt - 如何更新 Qt 维护工具
- php - 排除同名项目
- php - 在 Laravel 中根据表单值搜索数据
- java - NoClassDefFoundError 总是由 ClassNotFoundException 引起的吗?
- python - 识别矩阵中相邻元素的属性
- javascript - 刀片分页开始数据页0标签1使用jquery
- java - 获取 PKIX 路径构建失败
- arrays - Pact,确保数组中的键名
- javascript - jquery datepicker 不应在更新 minDate 或 maxDate 时自动更改时间值