xml - 简单的前同级选择返回意外结果
问题描述
我正在尝试在 BaseX 上学习 XPath/XQuery。XPath 查询返回一些我无法解释的结果。
输入 XML:
<?xml version="1.0" encoding="UTF-8"?>
<manual>
<chapter>
<section>
<itemizedlist type="Ordered" mark="1">
<listitem>
<para/>
</listitem>
<listitem>
<para/>
</listitem>
</itemizedlist>
<CWD>
<para>1</para>
</CWD>
<para/>
<CWD>
<para>2</para>
</CWD>
<para/>
<itemizedlist>
<listitem>
<para/>
</listitem>
<listitem>
<para/>
</listitem>
</itemizedlist>
<CWD>
<para>3</para>
</CWD>
<para/>
<itemizedlist>
<listitem>
<para/>
</listitem>
<listitem>
<para/>
</listitem>
</itemizedlist>
</section>
</chapter>
</manual>
XPath:
//CWD[preceding-sibling::itemizedlist[1]]
预期结果:紧跟在 itemizedlist 前面的 CWD 元素,因此:
<CWD>
<para>1</para>
</CWD>
<CWD>
<para>3</para>
</CWD>
实际结果:
<CWD>
<para>1</para>
</CWD>
<CWD>
<para>2</para>
</CWD>
<CWD>
<para>3</para>
</CWD>
为什么查询返回 CWD 2,我如何误用前面的兄弟轴?
解决方案
用于//CWD[preceding-sibling::*[1][self::itemizedlist]]
检查紧接在前的同级元素是否为itemizedlist
元素。
推荐阅读
- javascript - 每次单击输入时,如何在不刷新页面的情况下在我的 html 中显示数据库中的数据?
- python - 这两个python命令行有什么区别?(python -m module_name vs python module_name.py)
- c - 查找当前函数调用者的返回地址
- python - BeautifulSoup 导致内存泄漏超时
- python - “从模块导入类”从同一模块导入其他类
- flutter - 显示 null 的日期时间值
- postgresql - 奇怪的“数据已更改”问题
- python - 创建带条件的二进制变量
- javascript - D3js 使用 Internet Explorer 11 有什么问题
- python - How to add row name to cell in pandas dataframe?