注意:使用更新的代码进行编辑,产生名称空间的新问题。
使用XSLT 3.0和Saxon HE,我复制XML文档并复制它,我需要在元素@n
中增加属性<div type="foo" n="0300">
的值。在这种情况下,我想将@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"
?
答案 0 :(得分:3)
此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"/>
按要求。
答案 1 :(得分: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>