Итак, у меня есть следующий XML-ввод:
<parent>
<para> text 1 <NodeTypeA id="1">element1</NodeTypeA> text2 <Xref ref="1"/> text3</para>
<para>text 4</para>
<para><NodeTypeA id="2">elt2</NodeTypeA></para>
<para>text5 <Xref red="2"/>text6 <Xref ref="3"/>text7</para>
</parent>
Я пытаюсь извлечь узел Xref и разделить узлы para на две части, и благодаря этот ответ , этотработает. Однако в моем коде XSL мне нужно иметь шаблон идентификации и некоторый приоритет в моих шаблонах.
Вот мой полный код:
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
version="1.0">
<xsl:template match="@*|node()" priority="0">
<xsl:copy>
<xsl:apply-templates select="@*|node()" />
</xsl:copy>
</xsl:template>
<xsl:template match="para[Xref]" priority="1">
<xsl:apply-templates select="node()[1]"/>
</xsl:template>
<xsl:template match="para/node()[not(self::Xref)]" priority="1">
<xsl:param name="group" select="."/>
<xsl:apply-templates select="following-sibling::node()[1]">
<xsl:with-param name="group" select="$group | ."/>
</xsl:apply-templates>
</xsl:template>
<xsl:template match="para/node()[not(self::Xref) and not(following-sibling::Xref)][last()]" priority="1">
<xsl:param name="group" select="."/>
<para>
<xsl:copy-of select="$group | ."/>
</para>
</xsl:template>
<xsl:template match="para/Xref" priority="1">
<xsl:param name="group"/>
<xsl:if test="$group">
<para>
<xsl:copy-of select="$group"/>
</para>
</xsl:if>
<xsl:copy-of select="."/>
<xsl:apply-templates select="following-sibling::node()[1]"/>
</xsl:template>
</xsl:stylesheet>
Проблема заключается в том, что узлы para, которыеНЕ содержат узел Xref, дублируются в моем выводе, в то время как те, которые содержат узел Xref, преобразуются просто отличноВот вывод XML, который я получаю:
<?xml version="1.0"?>
<parent>
<para> text 1 <NodeTypeA id="1">element1</NodeTypeA> text2 </para>
<Xref ref="1" />
<para> text3</para>
<para><para>text 4</para></para>
<para><para><NodeTypeA id="2">elt2</NodeTypeA></para></para>
<para>text5 </para>
<Xref red="2" />
<para>text6 </para>
<Xref ref="3" />
<para>text7</para>
</parent>
Почему добавление шаблона идентификации и некоторого приоритета нарушает это и как я могу это исправить?
PS: я использую XSLT 1