2016-09-27 9 views
0

ROWENTRYのXMLがありますが、最初の行の後に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> 

要素ENTRYは、最初の行の後にのみ追加する必要があります。ご支援のための

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> 

1より大きい位置と一致するすべてのTBODY/ROWを。要素ROWを作成し、可能な属性をコピーします。要素ENTRYを作成し、コンテキストノードのすべての子ノードに進みます。

+0

ありがとう@ uL1。しかし、MOREROWSに遭遇した後、同じプロセスを繰り返すための "if"条件を追加する方法はありますか?ありがとう:) –

+0

@ ShravanVishwanathanあなたはテンプレートを ''に変更することができます。これはあなたのために働くでしょうか?そうでなければ、私はより多くの情報を必要とし、あなたの結果は何かなどです。 – uL1

+0

ありがとうございます。実際には、私はテーブルを公開しようとしているが、レンダリングがうまくいかない(データが間違った欄に掲載されている)。私のXSLはバグです。 MOREROWSは、実際には細胞を広げるために使用されます。 XSLでXMLからMOREROWSを削除したのは、レンダリングがそのように優れているからです。しかし今、XSLは、最初の列の次のデータの開始点を確認するのが混乱します。わかりやすくするためにサンプル図を添付しました。 –

関連する問題