2014-12-29 4 views
0

Мне интересно, может ли кто-нибудь помочь мне с проблемой, с которой я сталкиваюсь.Вставка узла в XML

Я использую 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> 

Я хотел бы быть в состоянии создать узел тр аналогичный узлу тр в источнике 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 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

Вы не дают достаточно информации. Пожалуйста, покажите свой текущий XSLT-код и полный входной файл XML/XHTML. В противном случае никто не сможет диагностировать проблему. –

ответ

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> 
+0

Спасибо @Rudramuni TP. После небольшой подстройки к моим потребностям, которые, похоже, сделали трюк. – FordPrefect141

Смежные вопросы