2016-09-27 73 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会感到困惑,以检查第一列中的下一个数据的开始。为了清晰起见,我附上了一个示例图。 –

相关问题