Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/xml/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/xslt/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
XSLT复制XML文件,更改一个属性的值_Xml_Xslt_Saxon_Xslt 3.0_Tei - Fatal编程技术网

XSLT复制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

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

使用XSLT 3.0和Saxon HE,我正在复制一个XML文档,在复制过程中,我需要增加元素
中属性
@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和名称空间,因为之前几乎肯定有人问过并回答过它)。