2016-09-27 70 views
0

我有一個帶有ROWENTRY的XML,但是我只需要在第一個ROW之後添加ENTRY在表中的特定行之後添加元素

XML:

<?xml version="1.0" encoding="UTF-8"?> 
<?xml-stylesheet type="text/xsl"?> 
<TABLE FRAME="ALL"> 
<TGROUP COLS="3"> 
<COLSPEC COLNAME="col1" COLWIDTH="5cm"/> 
<COLSPEC COLNAME="col2" COLWIDTH="6.00cm"/> 
<COLSPEC COLNAME="col3" COLWIDTH="5.91cm"/> 
<THEAD> 
<ROW> 
<ENTRY COLSEP="1" ROWSEP="1"><PARA><EMPHASIS>TA</EMPHASIS></PARA></ENTRY> 
<ENTRY COLSEP="1" ROWSEP="1"><PARA><EMPHASIS>TB</EMPHASIS></PARA></ENTRY> 
<ENTRY COLSEP="0" ROWSEP="1"><PARA><EMPHASIS>TC</EMPHASIS></PARA></ENTRY> 
</ROW> 
</THEAD> 
<TBODY> 
<ROW> 
<ENTRY COLSEP="1" MOREROWS="13" ROWSEP="1"><PARA>A</PARA></ENTRY> 
<ENTRY COLSEP="1" ROWSEP="1"><PARA>B</PARA></ENTRY> 
<ENTRY COLSEP="0" ROWSEP="1"><PARA>C</PARA></ENTRY> 
</ROW> 
<ROW> 
<ENTRY COLSEP="1" ROWSEP="1"><PARA>A1</PARA></ENTRY> 
<ENTRY COLSEP="0" ROWSEP="1"><PARA>B1</PARA></ENTRY> 
</ROW> 
<ROW> 
<ENTRY COLSEP="1" ROWSEP="1"><PARA>A2</PARA></ENTRY> 
<ENTRY COLSEP="0" ROWSEP="1"><PARA>B2</PARA></ENTRY> 
</ROW> 
<ROW> 

<ENTRY COLSEP="1" ROWSEP="1"><PARA>A4</PARA></ENTRY> 
<ENTRY COLSEP="0" ROWSEP="1"><PARA>A5</PARA></ENTRY> 
</ROW> 
<ROW> 
<ENTRY COLSEP="1" ROWSEP="1"><PARA>A5<PARA></ENTRY> 
<ENTRY COLSEP="0" ROWSEP="1"><PARA>A6</PARA></ENTRY> 
</ROW> 
<ROW> 
<ENTRY COLSEP="1" ROWSEP="1"><PARA>A6</PARA></ENTRY> 
<ENTRY COLSEP="0" ROWSEP="1"><PARA>A7</PARA></ENTRY> 
</ROW> 
</TBODY> 
</TGROUP> 
</TABLE> 

XSLT版本1.0

<?xml version="1.0" encoding="utf-8"?> 
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" 
    xmlns:msxsl="urn:schemas-microsoft-com:xslt" exclude-result-prefixes="msxsl" 
> 
    <xsl:template match="node()|@*"> 
    <xsl:copy> 
     <xsl:apply-templates select="node()|@*"/> 
    </xsl:copy> 
    </xsl:template> 
    <xsl:template match="TABLE/*/ROW"> 
    <ENTRY> 
     <xsl:apply-templates select="node()|@*"/> 
    </ENTRY> 
    </xsl:template> 
    </xsl:stylesheet> 

所需的輸出:

<?xml version="1.0" encoding="UTF-8"?> 
<?xml-stylesheet type="text/xsl"?> 
<TABLE FRAME="ALL"> 
<TGROUP COLS="3"> 
<COLSPEC COLNAME="col1" COLWIDTH="5cm"/> 
<COLSPEC COLNAME="col2" COLWIDTH="6.00cm"/> 
<COLSPEC COLNAME="col3" COLWIDTH="5.91cm"/> 
<THEAD> 
<ROW> 
<ENTRY COLSEP="1" ROWSEP="1"><PARA><EMPHASIS>TA</EMPHASIS></PARA></ENTRY> 
<ENTRY COLSEP="1" ROWSEP="1"><PARA><EMPHASIS>TB</EMPHASIS></PARA></ENTRY> 
<ENTRY COLSEP="0" ROWSEP="1"><PARA><EMPHASIS>TC</EMPHASIS></PARA></ENTRY> 
</ROW> 
</THEAD> 
<TBODY> 
<ROW> 
<ENTRY COLSEP="1" MOREROWS="13" ROWSEP="1"><PARA>A</PARA></ENTRY> 
<ENTRY COLSEP="1" ROWSEP="1"><PARA>B</PARA></ENTRY> 
<ENTRY COLSEP="0" ROWSEP="1"><PARA>C</PARA></ENTRY> 
</ROW> 
<ROW> 
<ENTRY/> 
<ENTRY COLSEP="1" ROWSEP="1"><PARA>A1</PARA></ENTRY> 
<ENTRY COLSEP="0" ROWSEP="1"><PARA>B1</PARA></ENTRY> 
</ROW> 
<ROW> 
<ENTRY/> 
<ENTRY COLSEP="1" ROWSEP="1"><PARA>A2</PARA></ENTRY> 
<ENTRY COLSEP="0" ROWSEP="1"><PARA>B2</PARA></ENTRY> 
</ROW> 
<ROW> 
<ENTRY/> 
<ENTRY COLSEP="1" ROWSEP="1"><PARA>A4</PARA></ENTRY> 
<ENTRY COLSEP="0" ROWSEP="1"><PARA>A5</PARA></ENTRY> 
</ROW> 
<ROW> 
<ENTRY/> 
<ENTRY COLSEP="1" ROWSEP="1"><PARA>A5<PARA></ENTRY> 
<ENTRY COLSEP="0" ROWSEP="1"><PARA>A6</PARA></ENTRY> 
</ROW> 
<ROW> 
<ENTRY/> 
<ENTRY COLSEP="1" ROWSEP="1"><PARA>A6</PARA></ENTRY> 
<ENTRY COLSEP="0" ROWSEP="1"><PARA>A7</PARA></ENTRY> 
</ROW> 
</TBODY> 
</TGROUP> 
</TABLE> 

元件01只應在第一行之後添加。

Sample figure

感謝您的支持。

+0

如果能解決您的問題,請確保您接受答案。見[這裏](http://meta.stackexchange.com/questions/5234/how-does-accepting-an-answer-work) – uL1

回答

0

替換爲您temaplate <xsl:template match="TABLE/*/ROW">

<xsl:template match="TBODY/ROW[position() > 1]"> 
    <xsl:element name="{name()}"> 
     <xsl:apply-templates select="@*"/> 
     <xsl:element name="ENTRY"/> 
     <xsl:apply-templates /> 
    </xsl:element> 
</xsl:template> 

匹配所有TBODY/ROW具有大於1位;創建元素ROW並複製其可能的屬性。創建元素ENTRY並繼續使用上下文節點的所有子元素。

+0

謝謝@ uL1。但是,在遇到MOREROWS之後,有沒有辦法添加「if」條件來重複相同的過程?謝謝:) –

+0

@ShravanVishwanathan你可以將模板更改爲'''。這會爲你做些什麼嗎?否則我需要更多的信息,你的結果是什麼等等。 – uL1

+0

謝謝。實際上,我試圖發佈一個表格,但渲染效果不好(數據發佈在錯誤的列中)。我的XSL是越野車。 MOREROWS實際上被用於跨越細胞。我通過XSL從XML中刪除了MOREROWS,因爲渲染非常好。但現在,XSL會感到困惑,以檢查第一列中的下一個數據的開始。爲了清晰起見,我附上了一個示例圖。 –

相關問題