将节点插入XML

时间:2014-12-29 15:25:03

标签: xml xslt xslt-1.0

我想知道是否有人可以帮我解决我遇到的问题。

我正在使用XSLT版本1来转换一些源XML,其中一部分如下所示:

<tr parent="ID0E4B" zylevel="3" type="categoryhead">
 <td colname="1">Utilities 1.61%</td> 
 <td colname="2">1.61</td>
 <td colname="3">300,000</td>
</tr>
<tr parent="ID0EOB" zylevel="2" type="categorytotal" >
 <td colname="1">Total </td>
 <td colname="2"/>
 <td colname="3">17,567,240</td>
</tr>

我希望能够创建一个类似于tr的tr节点 源xml中的节点并将其插入两个tr节点之间 在上面的例子中。要插入的节点应如下所示:

<tr parent="ID0EGWAE" zylevel="4" type="detail">
  <td colname="1">Other securities</td>
  <td colname="2">1.61</td>
  <td colname="3">335,207</td>
</tr>

现在XSLT处理器即将打印第二个tr 最顶层示例中的节点。所需的输出应如下所示:

    <tr parent="ID0E4B" zylevel="3" type="categoryhead">
        <td colname="1">Utilities 1.61%</td>
        <td colname="2">1.61</td>
        <td colname="3">300,000</td>
   </tr>
   <tr parent="ID0EGWAE" zylevel="4" type="detail">
    <td colname="1">Other securities</td>
    <td colname="2">1.61</td>
    <td colname="3">335,207</td>
   </tr>
    <tr parent="ID0EOB" zylevel="2" type="categorytotal" >
      <td colname="1">Total </td>
      <td colname="2"/>
      <td colname="3">17,567,240</td>
    </tr>

任何人的帮助都会非常感激。我必须 承认对这一点毫无头绪。

1 个答案:

答案 0 :(得分:1)

试试这个:

<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
<xsl:output method="xml" version="1.0" encoding="UTF-8" indent="yes"/>
<xsl:strip-space elements="*"/>
    <xsl:template match="@*|node()"><!-- identity template -->
        <xsl:copy><xsl:apply-templates select="node()|@*"/></xsl:copy>
    </xsl:template>

    <xsl:template match="tr">
        <xsl:copy><xsl:apply-templates select="@*|node()"/></xsl:copy>
        <xsl:if test="position()=1"><!-- Inserting given content after the first tr -->
            <tr parent="ID0EGWAE" zylevel="4" type="detail">
                <td colname="1">Other securities</td>
                <td colname="2">1.61</td>
                <td colname="3">335,207</td>
            </tr>
        </xsl:if>
    </xsl:template>

</xsl:stylesheet>