Xml 在另一个XSLT转换中使用一个XSLT转换的结果

Xml 在另一个XSLT转换中使用一个XSLT转换的结果,xml,xslt,Xml,Xslt,我是XSLT(2.0)新手,遇到了以下情况。我有如下的XML输入: 价值 价值2 价值 价值2 价值 价值2 我需要两样东西: 将包含的所有元素的属性名称从elemNameX更改为newelemNameX 更改所有的类型属性以引用这些新名称 我已经设法做到了第一步,但第二步我很难做到 我在考虑把所有的\\something\@type通读一遍,并试图找到\\elem[@name='newelemX']。但我无法匹配第一步中创建的修改后的 是否可以在不同模板中匹配一个模板的结果? 我在想把所有

我是XSLT(2.0)新手,遇到了以下情况。我有如下的XML输入:


价值
价值2
价值
价值2
价值
价值2
我需要两样东西:

  • 将包含
    的所有
    元素的属性名称从
    elemNameX
    更改为
    newelemNameX
  • 更改所有
    类型
    属性以引用这些新名称
  • 我已经设法做到了第一步,但第二步我很难做到

    我在考虑把所有的
    \\something\@type
    通读一遍,并试图找到
    \\elem[@name='newelemX']
    。但我无法匹配第一步中创建的修改后的

    是否可以在不同模板中匹配一个模板的结果?

    我在想把所有的东西都找出来 \elem[@name='newelemX']。但我无法匹配在中创建的修改 第一步

    是否可以在不同的模板中匹配一个模板的结果

    如果您已将评估模板的结果指定给变量,则可以(在XSLT 2.0中)。例如,可以将模板应用于变量中记录的节点序列。但是,如果你愿意允许逻辑上的一些重复,你就不需要再遇到这种麻烦了。即使在XSLT 1.0中也可以这样做:

    <xsl:stylesheet version="1.0"
        xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
    
      <!-- Identity transform for where there is no more specific match -->
      <xsl:template match="node()|@*">
        <xsl:copy>
          <xsl:apply-templates select="node()|@*" />
        </xsl:copy>
      </xsl:template>
    
      <!-- modified "name" attributes for certain "elem" elements -->    
      <xsl:template match="elem[subel1]/@name">
        <xsl:attribute name="name">new<xsl:value-of select="."/></xsl:attribute>
      </xsl:template>
    
      <!-- "type" attributes of "something" elements -->    
      <xsl:template match="something/@type">
        <!-- need to capture the current value for use in a test expression -->
        <xsl:variable name="current_value" select="." />
        <xsl:attribute name="type">
          <!-- insert "new" into the value where needed (logic duplicated here) -->
          <xsl:if test="/descendant::elem[@name=$current_value]/subel1">new</xsl:if>
          <xsl:value-of select="."/>
        </xsl:attribute>
      </xsl:template>
    
    </xsl:stylesheet>
    
    
    新的
    新的
    
    除了示例中所示的属性之外,您还需要关注其他属性吗?具体来说,您是否需要提供复制未描述的
    元素的任何属性的功能?您的示例XML格式不正确,因为
    元素未关闭。我假设您打算将其中一些开始标记改为结束标记。是的,
    还有其他属性需要保留。(在实践中比我的示例稍微复杂一些。事实上,我正在创建名为
    newelemNameX
    的新元素
    ,我从
    newelemNameX
    中引用
    elemNameX
    ,但由于我解决了这一部分,我简化了问题)。你说得对
    ,我会解决它的,谢谢!我没有意识到我可以在任何更改之前编写
    以匹配原始文档,这就成功了。