Как рассчитать позицию индекса первого элемента <w: p> на основе значения его дочернего атрибута в XSLT 2.0? - PullRequest
0 голосов
/ 03 января 2012

Это мой XML-документ.

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<w:document xmlns:w="http://schemas.openxmlformats.org/wordprocessingml/2006/main">

<w:body>

    <w:p> <!-- index 0 -->
        <w:pPr>
            <w:pStyle w:val="Heading1"/>
        </w:pPr>

        <w:r>
            <w:t>
                 Paragraph1
            </w:t>
        </w:r>
    </w:p>

    <w:p> <!-- index 1 -->
        <w:pPr>
            <w:pStyle w:val="TOC1"/>
        </w:pPr>

        <w:r>
            <w:t>
                 TOC1
            </w:t>
        </w:r>
    </w:p>

    <w:p>  <!-- index 2 -->
        <w:pPr>
            <w:pStyle w:val="TOC2"/>
        </w:pPr>

        <w:r>
            <w:t>
                 TOC2
            </w:t>
        </w:r>
    </w:p>
    <w:p> <!-- index 3 -->
        <w:pPr>
            <w:pStyle w:val="TOC3"/>
        </w:pPr>

        <w:r>
            <w:t>
                 TOC3
            </w:t>
        </w:r>
    </w:p>
    <w:p> <!-- index 4 -->
        <w:pPr>
        </w:pPr>
        <w:r>
            <w:t>
                 Paragraph2
            </w:t>
        </w:r>
    </w:p>

    <w:p> <!-- index 5 -->
        <w:pPr>
            <w:pStyle w:val="Heading1"/>
        </w:pPr>

        <w:r>
            <w:t>
                 Paragraph3
            </w:t>
        </w:r>
    </w:p>

</w:body>
</w:document>   

Итак, теперь я хочу вычислить следующие две вещи

1.Считать начальную позицию индекса элемента, значение которого <w:pStyle> начинается с"TOC". Здесь он начинается с первого <w:p> элемента (Предположим, индекс начинается с '0'). Итак, я хочу получить следующий вывод

2. Общее число того, у которого значение <w:pStyle> начинается с "TOC". Я посчитал это следующим выражением. Так что, пожалуйста, подскажите мне, чтобы получить первый ...

<xsl:attribute name="totalTOC">
   <xsl:value-of select="count(//w:body/w:p[w:pPr[w:pStyle[starts-with(@w:val,'TOC')]]])"/>
<xsl:attribute> 

Мой необходимый вывод:

<Document>
<TOC startIndex="1" totalTOC="3"/>
</Document>

1 Ответ

2 голосов
/ 03 января 2012

Вы можете использовать ось preceding-sibling следующим образом:

count(//w:body/w:p[w:pPr[w:pStyle[starts-with(@w:val,'TOC')]]][1]/preceding-sibling::*).

. Это выберет первый элемент, который соответствует вашим критериям, и вернет счетчик его предшествующих братьев и сестер (текущий индекс).Для одноосновного индекса просто добавьте 1.

...