Получить конкретную позицию XML-узла с XPATH? - PullRequest
3 голосов
/ 02 июля 2010

Позвольте мне начать с того, что я знаю о position(), но я не могу понять, как заставить это работать в этом контексте.

Что я пытаюсь сделать, так это перебирать свое телотекста и найти все изображения.Они будут превращены в ссылки с надписью «Рисунок 1» и так далее.Число предоставляется position() соответствующего узла в другом наборе узлов.

Вот пример моего XML:

<understanding-individual-question>
    <section id="18" handle="questions">Questions</section>
    <entry id="162">
        <images items="3">
            <item id="215">
                <description mode="normal" handle="winter-frozen-period-for-stile-s-pond" word-count="6">Winter frozen period for Stile’s Pond.</description>
                <file size="73 KB" path="/uploads" type="image/jpg">
                    <filename>lakefrozen-1276880623.jpg</filename>
                    <meta creation="2010-06-18T13:03:43-04:00" width="532" height="479" />
                </file>
                <title mode="normal" handle="stiles-pond-frozen" word-count="3">Stile's Pond Frozen</title>
            </item>
        </images>
    </entry>
</understanding-individual-question>

IЯ пробовал несколько различных методов, чтобы получить, какова будет позиция этого item узла из другого места в XML, но я продолжаю возвращать ошибки, ничего или NaN.

Воттри примера XSLT, которые я пробовал:

<xsl:template match="information//img">
    <xsl:variable name="link" select="substring-after(@src,'uploads/')" />
    <em>(<a rel="figure" href="{@src}">
        <xsl:text>See Figure </xsl:text>
        <!-- Method 1: Returns all as 'NaN' -->
        <xsl:number value="/data/understanding-individual-question/entry/images/item[file/filename = $link][position()]" format="1"/>
        <!-- Method 2: Returns all as '1' -->
        <xsl:for-each select="/data/understanding-individual-question/entry/images/item[file/filename = $link]">
            <xsl:number value="position()" format="1"/>
        </xsl:for-each>
        <!-- Method 3: Returns all as '2' -->
        <xsl:number value="position()" format="1"/>
    </a>.)</em>
</xsl:template>

Я проверил свой XPATH, и он возвращает правильный узел, нет проблем.Однако, что бы я ни делал, он никогда не возвращает position() узла!И я не могу понять, почему.

Я пытался следовать решениям этого вопроса , но я продолжал получать NaN.

У кого-нибудь есть идеи, как это сделать?

1 Ответ

2 голосов
/ 02 июля 2010

С вашим вторым методом используйте:

count(preceding-sibling::item) +1
...