1

注意:使用更新的代码进行了编辑,产生了命名空间的新问题。

使用 XSLT 3.0 和 Saxon HE,我正在复制一个 XML 文档,并且在复制它时,我需要增加@nelement中属性的值<div type="foo" n="0300">。在这种情况下,我想增加@n1。这是当前代码:

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

<xsl:template match="//tei:div[@type='foo']">
   <div type="foo">
        <xsl:attribute name="n">
            <xsl:value-of select="format-number(@n + 1,'0000')"/>
        </xsl:attribute>
   </div type>
</xsl:template>

它应该产生:

<div type="foo" n="0002"/>

而是产生以下内容:

<div xmlns="" xmlns:ntei="http://www.example.org/ns/nonTEI" type="foo" n="0301"/>

我正在使用 TEI 命名空间。如何防止添加这些属性:xmlns="" xmlns:ntei="http://www.example.org/ns/nonTEI"

4

2 回答 2

4

这个 XML 文档,

<div type="foo" n="0300"/>

当输入到这个 XSLT 3.0 转换时,

<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
                version="3.0">

  <xsl:output indent="yes"/>

  <xsl:mode on-no-match="shallow-copy"/>

  <xsl:template match="@n">
    <xsl:attribute name="n">
        <xsl:value-of select="format-number(. + 1,'0000')"/>
    </xsl:attribute>
  </xsl:template>

</xsl:stylesheet>

将产生这个输出 XML 文档,

<div type="foo" n="0301"/>

按照要求。

于 2017-12-19T23:42:35.787 回答
1
<xsl:template match="div[@type='foo']">
    <div type='foo'>
        <xsl:attribute name="n"><xsl:value-of select="format-number(@n + 1,'0000')"/></xsl:attribute>
    </div>
</xsl:template>
于 2017-12-19T22:43:24.340 回答