XSLT-复制所有节点并在复制的节点中添加额外节点

XSLT-复制所有节点并在复制的节点中添加额外节点,xslt,xslt-1.0,Xslt,Xslt 1.0,我正在寻找用于以下输入和输出XML的XSLT(1.0)代码 在输出XML中,C6元素下可以有任何子节点。在下面的XML中,我放置了CN元素,但它可以是任何名称 输入XML- <?xml version = "1.0" encoding = "UTF-8"?> <root> <input> <c2> <c3> &

我正在寻找用于以下输入和输出XML的XSLT(1.0)代码

在输出XML中,C6元素下可以有任何子节点。在下面的XML中,我放置了CN元素,但它可以是任何名称

输入XML-

    <?xml version = "1.0" encoding = "UTF-8"?>
    <root>
        <input>
            <c2>
                <c3>
                    <c4>c4</c4>
                </c3>
            </c2>
        </input>
        <output>
            <c5>
                <c6>
                    <CN>
                        <T1></T1>
                        <T2></T2>
                    </CN>
                </c6>
                <c6>
                    <CN>
                        <T1></T1>
                        <T2></T2>
                    </CN>
                </c6>
            </c5>
        </output>
    </root>

补体第四成份
所需的输出XML-

    <root>
    <output>
            <c5>
                <c6>
                <!-- It could have any child node. Putting an example with CN child node name.-->
                    <CN>
                        <T1></T1>
                        <T2></T2>
                        <c3>
                            <c4>c4</c4>
                            <NewNode>current number of CN node which will be 1</NewNode>
                            <NewNode1>total number of C6 nodes which will be 2.</NewNode1>
                        </c3>
                    </CN>
                </c6>
                <c6>
                    <CN>
                        <T1></T1>
                        <T2></T2>
                        <c3>
                            <c4>c4</c4>
                            <NewNode>current number of CN node which will be 2</NewNode>
                            <NewNode1>total number of C6 nodes which will be 2.</NewNode1>
                        </c3>
                    </CN>
                </c6>
            </c5>
        </output>
    </root>

补体第四成份
将为1的CN节点的当前数目
将为2的C6节点总数。
补体第四成份
将为2的CN节点的当前数目
将为2的C6节点总数。

提前感谢。

使用以下样式表:

<?xml version="1.0" encoding="UTF-8" ?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
  <xsl:output method="xml" encoding="UTF-8" indent="yes" />

  <xsl:template match="c6/*">
    <xsl:copy>
        <xsl:variable name="v1" select="count(../preceding-sibling::*)+1"/>
        <xsl:variable name="v2" select="count(../../*)"/>
        <xsl:apply-templates/>
        <xsl:apply-templates select="../../../../input/c2/c3">
          <xsl:with-param name="v1" select="$v1"/>
          <xsl:with-param name="v2" select="$v2"/>
        </xsl:apply-templates>
    </xsl:copy>
  </xsl:template>

  <xsl:template match="c3">
    <xsl:param name="v1"/>
    <xsl:param name="v2"/>
    <xsl:copy>
      <xsl:apply-templates/>
      <NewNode><xsl:value-of select="$v1"/></NewNode>
      <NewNode1><xsl:value-of select="$v2"/></NewNode1>
    </xsl:copy>
  </xsl:template>

  <xsl:template match="input"/>

  <xsl:template match="@*|node()">
    <xsl:copy><xsl:apply-templates select="@*|node()"/></xsl:copy>
  </xsl:template>
</xsl:stylesheet>


您已经向我们提供了要求,但您没有向我们展示您的尝试或您遇到的问题。没有实际问题。这看起来更像是一个请求。当wurken在da codez上时,也许你可以解释为什么第一个新节点有一个2,第二个新节点有一个1。还有,为什么NewNode1会得到它的值。@DanielHaley-谢谢你的评论。实际上,我并不擅长XSLT。因为我觉得有点复杂,所以我发布了我的要求。@Bluewood66-谢谢你的评论。我已经编辑了我的问题。如果还有其他问题,请告诉我。@Nilay,XSLT相当复杂,这是一个很好的理由,可以向这里的人表示尊重,他们可以回答您的问题,证明您在尝试自己解决问题方面做得很好,从而也给了他们一些开始的东西。如果你只是想让人们按照你的规范来编写代码,那么我相信你可以雇人来完成。