2016-09-26 15 views
0

私はテーブルを持つXMLファイルを持っています。私はXSLTバージョン1.0を使用しています。私は特定の行数の後にテーブルを分割する必要があります(例7行後)。次のページは同じヘッダーを持つ必要があり、データは継続する必要があります。XMLテーブルを水平方向に分割

図: 1. Original Table 2. Table Transform

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> 
<ROW> 

<ENTRY COLSEP="1" ROWSEP="1"><PARA>A7</PARA></ENTRY> 
<ENTRY COLSEP="0" ROWSEP="1"><PARA>A8</PARA></ENTRY> 
</ROW> 
<ROW> 
<ENTRY COLSEP="1" ROWSEP="1"><PARA>A8</PARA></ENTRY> 
<ENTRY COLSEP="0" ROWSEP="1"><PARA>A9</PARA></ENTRY> 
</ROW> 
<ROW> 
<ENTRY COLSEP="1" ROWSEP="1"><PARA>A9</PARA></ENTRY> 
<ENTRY COLSEP="0" ROWSEP="1"><PARA>A10</PARA></ENTRY> 
</ROW> 
<ROW> 
<ENTRY COLSEP="1" ROWSEP="1"><PARA>A10</PARA></ENTRY> 
<ENTRY COLSEP="0" ROWSEP="1"><PARA>A11</PARA></ENTRY> 
</ROW> 
<ROW> 
<ENTRY COLSEP="1" ROWSEP="1"><PARA>A11</PARA></ENTRY> 
<ENTRY COLSEP="0" ROWSEP="1"><PARA>A12</PARA></ENTRY> 
</ROW> 
</TBODY> 
</TGROUP> 
</TABLE> 

XSLT:

<?xml version="1.0" encoding="UTF-8"?> 
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0"> 
<xsl:param name="prowLimit" select="10"/> 

    <xsl:variable name="vartable" select="/*"/> 

    <xsl:template match="node()|@*" name="identity"> 
    <xsl:copy> 
     <xsl:apply-templates select="node()|@*"/> 
    </xsl:copy> 
    </xsl:template> 

    <xsl:template match="TABLE/ROW"> 
    <xsl:if test="position() mod $prowLimit = 7"> 

     <TBODY> 
     <xsl:copy-of select="$vartable/@*"/> 
     <xsl:copy-of select=". | following-sibling::ROW[not(position() > $prowLimit)]"/> 
     </TBODY> 


    </xsl:if> 
    </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 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> 
<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" ROWSEP="1"><PARA>A7</PARA></ENTRY> 
<ENTRY COLSEP="0" ROWSEP="1"><PARA>A8</PARA></ENTRY> 
</ROW> 
<ROW> 
<ENTRY COLSEP="1" ROWSEP="1"><PARA>A8</PARA></ENTRY> 
<ENTRY COLSEP="0" ROWSEP="1"><PARA>A9</PARA></ENTRY> 
</ROW> 
<ROW> 
<ENTRY COLSEP="1" ROWSEP="1"><PARA>A9</PARA></ENTRY> 
<ENTRY COLSEP="0" ROWSEP="1"><PARA>A10</PARA></ENTRY> 
</ROW> 
<ROW> 
<ENTRY COLSEP="1" ROWSEP="1"><PARA>A10</PARA></ENTRY> 
<ENTRY COLSEP="0" ROWSEP="1"><PARA>A11</PARA></ENTRY> 
</ROW> 
<ROW> 
<ENTRY COLSEP="1" ROWSEP="1"><PARA>A11</PARA></ENTRY> 
<ENTRY COLSEP="0" ROWSEP="1"><PARA>A12</PARA></ENTRY> 
</ROW> 
</TBODY> 
</TGROUP> 
</TABLE> 

しかし、XML階層に従っているかどうかわからないので、希望する出力が正しいかどうかはわかりません。私は、図に示されているように達成されるべき最終結果に行く。

Dimitre Novatchevが提供するコンセプトをSplit large table into several smaller tablesに使用しました。私は自分のXMLでXMLの構造を維持するためにXMLパーサーエラーを取得しています。

XSLTを変更して、「テーブル変換」図に示す出力を得る方法を教えてください。

+0

両方のテーブルリンクが同じ画像を指しています。 –

+0

Timさん、ありがとうございました。 –

+0

(1)**完全** XML、(2)期待される結果**をコード**として投稿してください。 –

答えて

0

私はあなたがこのような何かをしたい考える

XML:など整形入力に加え

XSLT 1.0

<xsl:stylesheet version="1.0" 
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> 
<xsl:output method="xml" version="1.0" encoding="UTF-8" indent="yes"/> 
<xsl:strip-space elements="*"/> 

<xsl:template match="/TABLE"> 
    <xsl:variable name="head" select="TGROUP/COLSPEC | TGROUP/THEAD" /> 
    <xsl:for-each select="TGROUP/TBODY/ROW[position() mod 7 = 1]"> 
     <TABLE> 
      <xsl:copy-of select="ancestor::TABLE/@*"/> 
      <TGROUP> 
       <xsl:copy-of select="ancestor::TGROUP/@*"/> 
       <xsl:copy-of select="$head"/> 
       <TBODY> 
        <xsl:copy-of select=". | following-sibling::ROW[position() &lt; 7]"/> 
       </TBODY> 
      </TGROUP> 
     </TABLE> 
    </xsl:for-each> 
</xsl:template> 

</xsl:stylesheet> 

<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> 
     <ROW> 
     <ENTRY COLSEP="1" ROWSEP="1"> 
      <PARA>A7</PARA> 
     </ENTRY> 
     <ENTRY COLSEP="0" ROWSEP="1"> 
      <PARA>A8</PARA> 
     </ENTRY> 
     </ROW> 
     <ROW> 
     <ENTRY COLSEP="1" ROWSEP="1"> 
      <PARA>A8</PARA> 
     </ENTRY> 
     <ENTRY COLSEP="0" ROWSEP="1"> 
      <PARA>A9</PARA> 
     </ENTRY> 
     </ROW> 
     <ROW> 
     <ENTRY COLSEP="1" ROWSEP="1"> 
      <PARA>A9</PARA> 
     </ENTRY> 
     <ENTRY COLSEP="0" ROWSEP="1"> 
      <PARA>A10</PARA> 
     </ENTRY> 
     </ROW> 
     <ROW> 
     <ENTRY COLSEP="1" ROWSEP="1"> 
      <PARA>A10</PARA> 
     </ENTRY> 
     <ENTRY COLSEP="0" ROWSEP="1"> 
      <PARA>A11</PARA> 
     </ENTRY> 
     </ROW> 
     <ROW> 
     <ENTRY COLSEP="1" ROWSEP="1"> 
      <PARA>A11</PARA> 
     </ENTRY> 
     <ENTRY COLSEP="0" ROWSEP="1"> 
      <PARA>A12</PARA> 
     </ENTRY> 
     </ROW> 
    </TBODY> 
    </TGROUP> 
</TABLE> 

結果は次のようになります。それは、単一のルート要素を持っていないため、出力は整形式のXMLではないことを

<?xml version="1.0" encoding="UTF-8"?> 
<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> 
     <ROW> 
      <ENTRY COLSEP="1" ROWSEP="1"> 
       <PARA>A7</PARA> 
      </ENTRY> 
      <ENTRY COLSEP="0" ROWSEP="1"> 
       <PARA>A8</PARA> 
      </ENTRY> 
     </ROW> 
     </TBODY> 
    </TGROUP> 
</TABLE> 
<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" ROWSEP="1"> 
       <PARA>A8</PARA> 
      </ENTRY> 
      <ENTRY COLSEP="0" ROWSEP="1"> 
       <PARA>A9</PARA> 
      </ENTRY> 
     </ROW> 
     <ROW> 
      <ENTRY COLSEP="1" ROWSEP="1"> 
       <PARA>A9</PARA> 
      </ENTRY> 
      <ENTRY COLSEP="0" ROWSEP="1"> 
       <PARA>A10</PARA> 
      </ENTRY> 
     </ROW> 
     <ROW> 
      <ENTRY COLSEP="1" ROWSEP="1"> 
       <PARA>A10</PARA> 
      </ENTRY> 
      <ENTRY COLSEP="0" ROWSEP="1"> 
       <PARA>A11</PARA> 
      </ENTRY> 
     </ROW> 
     <ROW> 
      <ENTRY COLSEP="1" ROWSEP="1"> 
       <PARA>A11</PARA> 
      </ENTRY> 
      <ENTRY COLSEP="0" ROWSEP="1"> 
       <PARA>A12</PARA> 
      </ENTRY> 
     </ROW> 
     </TBODY> 
    </TGROUP> 
</TABLE> 

注意。

+0

マイケルに感謝します。私はその投稿を修正した。しかし、どうにかして私のXMLに適用すると分割できない –

+0

テーブルの2番目の分割が得られない –

+0

@ShravanVishwanathan私はTGROUPの変更に合わせて答えを変更しました。入力XMLにはまだ欠陥があります:閉じられていないPARA要素があります。 –

関連する問題