使用xslt创建元素的副本及其值

时间:2015-04-06 12:00:20

标签: xml xslt

我正在尝试使用xslt转换xml代码。 以下是我的XML结构:

    <Response>
    <Case>
    <CaseID>...</CaseID>
    ...
    <BillStatusCode typecode="1">type description</BillStatusCode>
    </Case>
    </Response>

我想把它转换成这样的东西:

   ...
   <BillStatusCode>
   <BillStatusCode>type description</BillStatusCode>
   <typecode>1</typecode>
   </BillStatusCode>

XSLT代码:

    <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
    <xsl:output omit-xml-declaration="yes" indent="yes"/>
    <xsl:strip-space elements="*"/>
    <xsl:template match="node()|@*">
    <xsl:copy>
    <xsl:apply-templates select="node()|@*"/>
    </xsl:copy>
    </xsl:template>
    <xsl:template match="@*">
    <xsl:element name="{name()}">
   <xsl:value-of select="."/>
   </xsl:element>
   </xsl:template>
   </xsl:stylesheet>

它给了我这个输出:

    <Response>
    <BillStatusCode>
    <typecode>1</typecode>type description</BillStatusCode>
    </Response>

感谢任何有关此事的帮助。谢谢!

1 个答案:

答案 0 :(得分:1)

我并不完全清楚你想要达到的目标。

以下代码可能指向您需要的方向:

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
 <xsl:output omit-xml-declaration="yes" indent="yes"/>
 <xsl:strip-space elements="*"/>

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

 <xsl:template match="BillStatusCode">
   <xsl:copy>
     <xsl:element name="{name()}">
       <xsl:apply-templates select="node()"/>
     </xsl:element>
     <xsl:apply-templates select="@*"/>
   </xsl:copy>
 </xsl:template>

 <xsl:template match="@*">
   <xsl:element name="{name()}">
     <xsl:value-of select="."/>
   </xsl:element>
 </xsl:template>
 </xsl:stylesheet>