2017-08-02 4 views
-1
における単一のテーブルの列

にそれをマージする必要があるサンプルXML私はXMLからHTMLに変換する必要があります。私は、共通の値を持つ要素を識別し、ここでHTML

<?xml version='1.0' encoding='UTF-8'?> 
<message> 
<body> 
<asset> 

    <asset-id>test_01</asset-id> 
    <asset-name>report_test</asset-name> 
    <asset-version>1</asset-version> 
    <entity> 
    <id>project_test</id> 
     <entity-record> 
     <id>864d6141-712b-11e7-b775-f9304f8b3051#-</id> 
      <field> 
      <id>name</id> 
      <value>Transport</value> 
      </field> 
      <field> 
      <id>task</id> 
      <value>Person1</value> 
      </field> 
     </entity-record> 
     <entity-record> 
     <id>864d6141-812b-11e7-b775-f9304f8b3951#-</id> 
      <field> 
      <id>name</id> 
      <value>Transport</value> 
      </field> 
      <field> 
      <id>task</id> 
      <value>Person2</value> 
      </field> 
     </entity-record> 
     <entity-record> 
     <id>864d6141-712b-11e7-b775-f9314f8b3951#-</id> 
      <field> 
      <id>name</id> 
      <value>Food </value> 
      </field> 
      <field> 
      <id>task</id> 
      <value>Person3</value> 
      </field> 
     </entity-record> 
     <entity-record> 
     <id>864e6141-712b-11e7-b775-f9304f8b3951#-</id> 
      <field> 
      <id>name</id> 
      <value>Food</value> 
      </field> 
      <field> 
      <id>task</id> 
      <value>Person4</value> 
      </field> 
     </entity-record> 
     <entity-record> 
      <field> 
      <id>name</id> 
      <value>Food</value> 
      </field> 
      <field> 
      <id>task</id> 
      <value>Person5</value> 
      </field> 
     </entity-record> 
     <entity-record> 
      <field> 
      <id>name</id> 
      <value>Transport</value> 
      </field> 
      <field> 
      <id>task</id> 
      <value>Person3</value> 
      </field> 
     </entity-record> 
    </entity> 
</asset> 
</body> 
</message> 

そして、ここでは、私が最初の2のためのMuenchian方法を使用してみました1つのが悪いの試みです細胞。ここで

<?xml version="1.0" encoding="utf-8"?> 
<xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> 
    <xsl:output method="html" indent="yes"/> 
<xsl:key name="fieldbyid" match="field" use="value" /> 
<xsl:template match="message"> 
<html> 
<body> 
<table border="1"> 
    <tr> 
     <td>Project</td> 
     <td>Task</td> 
    </tr> 
    <tr> 
     <xsl:for-each select="body/asset/entity[id[text()='project_test']]/entity-record"> 
     <xsl:sort select="field[id[text()='name']]/value"/> 
     <xsl:for-each select="field[count(./value|key('fieldbyid','value')[1])=1]"> 
     <tr>     
      <td rowspan="{count(key('fieldbyid','value'))}"> 
      <xsl:value-of select="field[id[text()='name']]/value"/> 
      </td> 
      <td><xsl:value-of select="field[id[text()='task']]/value"/></td> 
     </tr> 
     </xsl:for-each> 
     </xsl:for-each> 
    </tr> 
</table> 
</body> 
</html> 
</xsl:template> 
</xsl:stylesheet> 

は、私は、これは、私は私の出力がループための第二の除去には、 enter image description here enter image description here を見てみたい方法です用の外にコードを保っていること

<html> 
     <body> 
      <table border="1"> 
      <tr> 
       <td>Project</td> 
       <td>Task</td> 
      </tr> 
      <tr> 
       <tr> 
        <td>Food</td> 
        <td rowspan="0"></td> 
        <td></td> 
       </tr> 
       <tr> 
        <td>Person4</td> 
        <td rowspan="0"></td> 
        <td></td> 
       </tr> 
       <tr> 
        <td>Food</td> 
        <td rowspan="0"></td> 
        <td></td> 
       </tr> 
       <tr> 
        <td>Person5</td> 
        <td rowspan="0"></td> 
        <td></td> 
       </tr> 
       <tr> 
        <td>Food </td> 
        <td rowspan="0"></td> 
        <td></td> 
       </tr> 
       <tr> 
        <td>Person3</td> 
        <td rowspan="0"></td> 
        <td></td> 
       </tr> 
       <tr> 
        <td>Transport</td> 
        <td rowspan="0"></td> 
        <td></td> 
       </tr> 
       <tr> 
        <td>Person1</td> 
        <td rowspan="0"></td> 
        <td></td> 
       </tr> 
       <tr> 
        <td>Transport</td> 
        <td rowspan="0"></td> 
        <td></td> 
       </tr> 
       <tr> 
        <td>Person2</td> 
        <td rowspan="0"></td> 
        <td></td> 
       </tr> 
       <tr> 
        <td>Transport</td> 
        <td rowspan="0"></td> 
        <td></td> 
       </tr> 
       <tr> 
        <td>Person3</td> 
        <td rowspan="0"></td> 
        <td></td> 
       </tr> 
      </tr> 
      </table> 
     </body> 
    </html> 

を取得し、出力されますループ、<xsl:for-each select="field[count(./value|key('fieldbyid','value')[1])=1]"> atleast値を表示するようだ。 このステートメントは正確に何を意味していますか? また、 "。"の値idとvalueの両方を表示しているので、この場合は./valueを使用しています。 助けがあれば助かります! おかげ

+0

私は出力として何をしたいのか分かりません - 言葉で論理を説明してください。 - XSLT 2.0を使用できるのであれば、なぜMuenchianのグループ分けの代わりに 'xsl:for-each-group'を使用しないのですか? –

+0

あなたの入力に金額が表示されません。 –

答えて

0

をあなたが実際にXSLT 2.0プロセッサを使用している場合は、あなたの出発点としてこれを試してみてください。

XSLT 2.0

<xsl:stylesheet version="2.0" 
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> 
<xsl:output method="html" indent="yes"/> 

<xsl:template match="/message"> 
    <html> 
     <body> 
      <table border="1"> 
       <tr> 
        <th>Project</th> 
        <th>Task</th> 
       </tr> 
       <!-- group by name --> 
       <xsl:for-each-group select="body/asset/entity/entity-record" group-by="field[id='name']/value"> 
        <xsl:variable name="tasks"> 
         <!-- group by task --> 
         <xsl:for-each-group select="current-group()" group-by="field[id='task']/value"> 
          <tr> 
           <td> 
            <xsl:value-of select="current-grouping-key()" /> 
           </td> 
          </tr> 
         </xsl:for-each-group>  
        </xsl:variable> 
        <tr> 
         <td rowspan="{1 + count($tasks/tr)}"> 
          <xsl:value-of select="current-grouping-key()" /> 
         </td> 
        </tr> 
        <xsl:copy-of select="$tasks"/> 
       </xsl:for-each-group>    
      </table> 
     </body> 
    </html> 
</xsl:template> 

</xsl:stylesheet> 

出力は次のようになります。

enter image description here

これは入力例を調整した後のものです。 o <value>Food </value>の余分なスペースを削除します。

関連する問題