XSLT 2.0 XPATH пересекаются - PullRequest
       26

XSLT 2.0 XPATH пересекаются

0 голосов
/ 19 октября 2018

В XSLT 2.0, Я пытаюсь развернуть intersect для использования переменной xsl: в выражении XPATH.Файлы в https://xsltfiddle.liberty -development.net / gWmuiK6 / 1 (проблема ниже в строках 175-192 в xslt).

Я объявляю переменную:

<xsl:variable name="app-sources" select="tei:del[@rend='expunctus'] | 
    tei:gap | 
    tei:sic | 
    tei:supplied[@reason='added'] | 
    tei:surplus[@reason='repeated' or @reason='surplus']  |
    tei:unclear"></xsl:variable>

И я использую эту переменную здесь с intersect, и она не выводит ожидаемый результат:

 <xsl:template match="*[. intersect $app-sources]">
    <xsl:choose>
        <xsl:when test="self::tei:del[@rend='expunctus']">
            [<xsl:text>EXPUNCTUS</xsl:text>]<xsl:apply-templates/><sup> 
           <xsl:number count="*[. intersect $app-sources]" format="a" level="any"/></sup>
        </xsl:when>
    </xsl:choose>
 </xsl:template>

Ожидаемый результат в HTML [EXPUNCTUS]quondam<sup>b</sup> quandam (около строки 465 в выводе HTML).

Но если я заменим *[. intersect $app-sources] исходным XPATH, он будет работать нормально:

 <xsl:template match="tei:del[@rend='expunctus'] | 
    tei:gap | 
    tei:sic | 
    tei:supplied[@reason='added'] | 
    tei:surplus[@reason='repeated' or @reason='surplus']  |
    tei:unclear">
    <xsl:choose>
        <xsl:when test="self::tei:del[@rend='expunctus']">
            [<xsl:text>EXPUNCTUS</xsl:text>]<xsl:apply-templates/><sup> 
           <xsl:number count="tei:del[@rend='expunctus'] | 
                                 tei:gap | 
                                 tei:sic | 
                                 tei:supplied[@reason='added'] | 
                                 tei:surplus[@reason='repeated' or @reason='surplus']  |
                                 tei:unclear" format="a" level="any"/></sup>
        </xsl:when>
    </xsl:choose>
 </xsl:template>

Любопытно, что intersect прекрасно работает в <xsl:template match="*[. intersect $footnote-sources]" mode="build_footnotes"> чуть ниже приведенного выше кода.

1 Ответ

0 голосов
/ 19 октября 2018

Если вы объявляете глобальную переменную с

<xsl:variable name="app-sources" select="tei:del[@rend='expunctus'] | 
    tei:gap | 
    tei:sic | 
    tei:supplied[@reason='added'] | 
    tei:surplus[@reason='repeated' or @reason='surplus']  |
    tei:unclear"></xsl:variable>

, все ваши пути, такие как tei:del, используются для выбора с основным узлом входного документа в качестве узла контекста, а ваш первичный входной документ имеет TEIкорневой элемент, но, конечно, нет del или gap или любых других элементов в качестве дочерних узлов узла документа.Поэтому вам нужно будет убедиться, что вы используете пути, такие как //tei:del или //dei:gap, чтобы выбрать любые элементы-потомки используемого имени основного входного документа.

Конечно, поскольку вы также используете временные документы, созданные в режимах, может оказаться, что для этой переменной вы не хотите выбирать потомков первичного входного документа, а скорее из временных результатов, которые вы имеете в другой переменнойпоэтому в этом случае вам нужно будет использовать, например, $foo//tei:gap в выражениях вашего пути, выбирая узлы, связанные с переменной app-sources.

...