Определение контекста для позиции ()в шаблоне с несколькими предикатами

У меня возникли проблемы с определением правильного контекста для набора узлов. У меня есть совпадение с шаблоном, которое выглядит примерно так (с использованием XSL 2.0):

<xsl:template match="//chapter/body/*[matches(name(), '^toc')][crossref][not(crossref/@idref='cip' or crossref/@idref='copy')]">
  <xsl:variable name="curr_id" select="crossref/@idref"/>
  <xsl:element name="location">
    <xsl:attribute name="id"><xsl:value-of select="$curr_id"/></xsl:attribute>
    <xsl:attribute name="order"><xsl:value-of select="position()"/></xsl:attribute>
    <xsl:element name="label">
        <text><xsl:value-of select="."/></text>
    </xsl:element>
  </xsl:element>
</xsl:template>

XML выглядит примерно так:

<chapter id="toc">
  <body>
    <title>Contents</title>
    <tocfm><crossref idref="cip">Catalog</crossref></tocfm>
    <tocfm><crossref idref="copy">Copyright</crossref></tocfm>
    <tocfm><crossref idref="ded">Dedication</crossref></tocfm>
    <toc><crossref idref="prologue">Prologue</crossref></toc>
    <toc><crossref idref="pt1">Book One</crossref></toc>
    <toc><crossref idref="pt2">Book Two</crossref></toc>
    <toc><crossref idref="pt3">Book Three</crossref></toc>
  </body>
</chapter>

Я ожидаю, что предикат сгенерирует набор узлов, содержащий:

<tocfm><crossref idref="ded">Dedication</crossref></tocfm>
<toc><crossref idref="prologue">Prologue</crossref></toc>
<toc><crossref idref="pt1">Book One</crossref></toc>
<toc><crossref idref="pt2">Book Two</crossref></toc>
<toc><crossref idref="pt3">Book Three</crossref></toc>

Другими словами, все элементы toc -like содержат перекрестную ссылку, idref которой не является cip или копией. Шаблон делает это с точки зрения вывода, но функция position, похоже, не работает с этим набором узлов. Вместо этого он генерирует позицию «3» для Посвящения. Однако, если я вывожу значение найденного узла, следуя предикату с [1], я получаю посвящение в качестве этого значения. Итак, я в тупике относительно того, над какой позицией работает. Кто-нибудь может просветить меня?

5
задан Sean B. Durkin 11 July 2012 в 01:17
поделиться