XSLT 复制 XML 文件,更改一个属性的值
XSLT copy XML file, change value of one attribute
注意:使用更新的代码进行编辑,产生了新的命名空间问题。
使用 XSLT 3.0 和 Saxon HE,我正在复制一个 XML 文档,在复制它时我需要增加元素 <div type="foo" n="0300">
中属性 @n
的值。在这种情况下,我想将 @n
递增 1。这是当前代码:
<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"
?
<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>
这个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"/>
根据要求。
注意:使用更新的代码进行编辑,产生了新的命名空间问题。
使用 XSLT 3.0 和 Saxon HE,我正在复制一个 XML 文档,在复制它时我需要增加元素 <div type="foo" n="0300">
中属性 @n
的值。在这种情况下,我想将 @n
递增 1。这是当前代码:
<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"
?
<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>
这个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"/>
根据要求。