简单的previous-sibling选择返回意外结果

问题描述 投票:2回答:1

我正在尝试在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]]

预期结果: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,以及我如何滥用前一个兄弟轴?

xml xpath xquery basex
1个回答
3
投票

使用//CWD[preceding-sibling::*[1][self::itemizedlist]]检查前一个兄弟元素是否为itemizedlist元素。

© www.soinside.com 2019 - 2024. All rights reserved.