Простой выбор предшествующего брата возвращает неожиданные результаты - PullRequest
0 голосов
/ 04 сентября 2018

Я пытаюсь изучить XPath / XQuery на BaseX. Запрос 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 непосредственно предшествует itemizedlist, следовательно:

<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 и как я неправильно использую ось предшествующего брата?

1 Ответ

0 голосов
/ 04 сентября 2018

Используйте //CWD[preceding-sibling::*[1][self::itemizedlist]], чтобы проверить, что непосредственно предшествующий элемент одного уровня является элементом itemizedlist.

...