Исключение одного элемента в XSLT при использовании document () - PullRequest
0 голосов
/ 23 января 2019

Я использую document () для копирования содержимого XML-файла (с тегом DITA) в переменную. Вот код, который я использовал ранее, который работал:

<xsl:variable name="fileContent">
    <xsl:copy-of select="document($fileSrc)"/>
</xsl:variable>

Теперь я хочу включить все, кроме элемента <draft-comment>. Я пытался изменить document () следующим образом:

<xsl:variable name="fileContent">
    <xsl:copy-of select="document($fileSrc)/*[not(draft-comment)]"/>
</xsl:variable>

Это не похоже на работу. Текст все еще там. Любые предложения о том, как я могу это исправить? Спасибо за вашу помощь.

1 Ответ

0 голосов
/ 23 января 2019

Создайте два шаблона с атрибутом mode;один для копирования узлов без изменений, а другой для игнорирования draft-comment

<xsl:template match="@*|node()" mode="document">
    <xsl:copy>
        <xsl:apply-templates select="@*|node()" mode="document" />
    </xsl:copy>
</xsl:template>

<xsl:template match="draft-comment" mode="document" />

Тогда вы можете использовать xsl:apply-templates вместо xsl:copy-of

<xsl:variable name="fileContent">
   <xsl:apply-templates select="document($fileSrc)" mode="document" />
</xsl:variable>

Обратите внимание, что xsl:copy-of делаетdeep-copy, и ваш существующий оператор будет копировать корневой элемент и все, что находится под ним, до тех пор, пока у него нет дочернего узла с именем draft-comment

...