Доступ только к ближайшему родственнику в xslt - PullRequest
5 голосов
/ 11 февраля 2011

Я использую XSLT 1.0. В настоящее время я нахожусь в <w:t> шаблоне. Я хочу проверить, имеет ли предыдущий брат w:r(id=3) <w:fldChar w:fldCharType="end"/>.

Я хочу только непосредственный предшествующий брат, а не w:r с id=2 или id=1.

<t xmlns:w="http://example.com">
    <w:r id="1">
        <w:fldChar w:fldCharType="start"/>
    </w:r>
    <w:r id="2">
        <w:fldChar w:fldCharType="separate"/>
    </w:r>
    <w:bookmarkStart w:id="0" w:name="tocStartRef_1"/>
    <w:r id="3">
        <w:fldChar w:fldCharType="end"/>
    </w:r>
    <w:bookmarkEnd w:id="0"/>
    <w:r id="4">
        <w:rPr>
            <w:rStyle w:val="Span"/>
            <w:rFonts w:ascii="arial" w:eastAsia="arial" 
                      w:hAnsi="arial" w:cs="arial"/>
            <w:b/>
            <w:sz w:val="32"/>
        </w:rPr>
        <w:t>Fonts</w:t>
    </w:r>
</t>

1 Ответ

12 голосов
/ 11 февраля 2011

Используйте ось xpath preceding-sibling следующим образом:

preceding-sibling::w:r[1]/w:fldChar/@w:fldCharType = 'end'

, которая выберет ближайший ([1]) preceding-sibling с именем w:r, а затем опустится до любого дочернего элемента (-ов) с именемw:fldChar, затем любые атрибуты с именем w:fldCharType, затем, если существует какой-либо такой узел, чей текст 'end', возвращает true.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...