我想知道是否有人可以帮我解决我遇到的问题。
我正在使用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>
任何人的帮助都会非常感激。我必须 承认对这一点毫无头绪。
答案 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>