如何使用xslt在其节点内创建xml的副本?

时间:2016-11-28 12:03:00

标签: xml xslt xslt-1.0 xslt-2.0

我有这样的xml:

<p>
                  <p1>DISTRIBUTOR</p1>
                  <p2>f</p2>
                  <p3>us</p3>
                  <p4>5</p4>
                  <c>
                     <c1>SOCIAL_MEDIA</c1>
                     <c2>www.facebook.com</c2>
                     <c3>facebook</c3>
                  </c>
                  <c>
                     <c1>EMAIL</c1>
                     <c2>www.gmail.com</c2>
                     <c3>gmail</c3>
                  </c>
               </p>

我希望使用xslt以下列方式输出,它基本上是创建其部分的副本:

       <p>
          <p1>DISTRIBUTOR</p1>
          <p2>f</p2>
          <p3>us</p3>
          <p4>5</p4>
          <c>
              <p1>DISTRIBUTOR</p1>
             <p2>f</p2>
             <p3>us</p3>
             <p4>5</p4>
             <c1>SOCIAL_MEDIA</c1>
             <c2>www.facebook.com</c2>
             <c3>facebook</c3>
          </c>
          <c>
              <p1>DISTRIBUTOR</p1>
             <p2>f</p2>
             <p3>us</p3>
             <p4>5</p4>
             <c1>EMAIL</c1>
             <c2>www.gmail.com</c2>
             <c3>gmail</c3>
          </c>
       </p>

任何人都可以帮助我.... 我尝试将数组创建用于要复制的元素,但最终会混淆输出。

1 个答案:

答案 0 :(得分:0)

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

<xsl:template match="c">    
    <xsl:copy>
        <xsl:copy-of select="/p/node()[starts-with(name(), 'p')]"/>
        <xsl:apply-templates select="node()|@*"/>
    </xsl:copy>
</xsl:template>