XSLT复制XML文件,更改一个属性的值
注意:使用更新的代码进行编辑,会产生新的名称空间问题 使用XSLT 3.0和Saxon HE,我正在复制一个XML文档,在复制过程中,我需要增加元素XSLT复制XML文件,更改一个属性的值,xml,xslt,saxon,xslt-3.0,tei,Xml,Xslt,Saxon,Xslt 3.0,Tei,注意:使用更新的代码进行编辑,会产生新的名称空间问题 使用XSLT 3.0和Saxon HE,我正在复制一个XML文档,在复制过程中,我需要增加元素中属性@n的值。在这种情况下,我想将@n增加1。这是当前代码: <xsl:template match="@* | node()"> <xsl:copy> <xsl:apply-templates select="@* | node()"/> </xsl:copy> &l
中属性@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“
?
此XML文档
<div type="foo" n="0300"/>
<div type="foo" n="0301"/>
当输入此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="0300"/>
<div type="foo" n="0301"/>
根据要求。此XML文档
<div type="foo" n="0300"/>
<div type="foo" n="0301"/>
当输入此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="0300"/>
<div type="foo" n="0301"/>
根据要求。@mg kedzie几乎可以用了。它生成以下内容:。我在TEI名称空间中工作。@mg kedzie几乎可以工作。它生成以下内容:。我在TEI名称空间中工作。非常好。我删除了我正在使用的过多的名称空间声明,这解决了另一个“问题”(您的评论得到了适当的注意)。非常感谢!效果很好。我删除了我正在使用的过多的名称空间声明,这解决了另一个“问题”(您的评论得到了适当的注意)。非常感谢!回答完问题后请不要改变。对于一个新来的人(比如我)来说,看到的答案只解决了问题的一部分,几乎不可能弄清楚到底发生了什么。如果您在名称空间方面遇到了与原始问题完全无关的问题,请提出新问题。(但请先阅读XSLT和名称空间,因为之前几乎肯定有人问过并回答过它)。对于一个新来的人(比如我)来说,看到的答案只解决了问题的一部分,几乎不可能弄清楚到底发生了什么。如果您在名称空间方面遇到了与原始问题完全无关的问题,请提出新问题。(但请先阅读XSLT和名称空间,因为之前几乎肯定有人问过并回答过它)。