У меня есть XSL, как следует,XSLT - <xsl:number> элемент пропустить некоторые узлы
<doc>
<sec>
<para>para</para>
<para>para</para>
<para>§ 9.02A spara</para>
<para>para</para>
<para>para</para>
</sec>
<sec>
<para>para</para>
<para>para</para>
<para>para</para>
<para>para</para>
<para>para</para>
</sec>
<sec>
<para>para</para>
<para>para</para>
<para>para</para>
<para>para</para>
<para>para</para>
</sec>
</doc>
Мне нужно добавить имя атрибута type
в <para>
элемент, анализируя text()
узел <para>
элемента.
, если text()
узел, начиная с «» § 9.02A атрибут типа должен быть «ххх» в противном случае атрибут типа должно быть последовательное числовое значение, начиная с номера 1 для каждого уровня, так что ожидается выход должен быть,
<doc>
<sec>
<para type="1">para</para>
<para type="2">para</para>
<para type="XXX">§ 9.02A spara</para>
<para type="3">para</para>
<para type="4">para</para>
</sec>
<sec>
<para type="1">para</para>
<para type="2">para</para>
<para type="3">para</para>
<para type="4">para</para>
<para type="5">para</para>
</sec>
<sec>
<para type="1">para</para>
<para type="2">para</para>
<para type="3">para</para>
<para type="4">para</para>
<para type="5">para</para>
</sec>
</doc>
Я написал XSL для этого, как следует,
<xsl:template match="node()|@*">
<xsl:copy>
<xsl:apply-templates select="node()|@*"/>
</xsl:copy>
</xsl:template>
<xsl:template match="para">
<xsl:variable name="position" as="xs:string">
<xsl:number count="para" level="single" select=". except para[matches(.,'§\s\d+\.\d+[A-Z]')]"/>
</xsl:variable>
<para>
<xsl:if test="matches(.,'§\s\d+\.\d+[A-Z]')">
<xsl:attribute name="type">
<xsl:value-of select="'XXX'"/>
</xsl:attribute>
<xsl:apply-templates/>
</xsl:if>
<xsl:if test="not(matches(.,'§\s\d+\.\d+[A-Z]'))">
<xsl:attribute name="type">
<xsl:value-of select="$position"/>
</xsl:attribute>
<xsl:apply-templates/>
</xsl:if>
</para>
</xsl:template>
проблема здесь есть, когда текст() начинается с '§ 9.02A'
атрибутом не skiping этого уровня (см уровня один <para>
сгенерированного выхода .. значения тока 1,2, XXX, 4,5. она должна быть 1,2, XXX, 3,4)
выходной ток,
<doc>
<sec>
<para type="1">para</para>
<para type="2">para</para>
<para type="XXX">§ 9.02A spara</para>
<para type="4">para</para>
<para type="5">para</para>
</sec>
<sec>
<para type="1">para</para>
<para type="2">para</para>
<para type="3">para</para>
<para type="4">para</para>
<para type="5">para</para>
</sec>
<sec>
<para type="1">para</para>
<para type="2">para</para>
<para type="3">para</para>
<para type="4">para</para>
<para type="5">para</para>
</sec>
</doc>
это может быть сделано с помощью другого метода, как графа() функции, но я действительно необходимо, чтобы сделать это в этом путь. может ли кто-нибудь предложить мне способ, как я могу изменить, чтобы получить правильный результат?
Параметр 'самостоятельно: para' не нужен, я думаю,' ' должен делать тоже. –
@MartinHonnen, как всегда, спасибо Мартину! –