2016-08-15 138 views
0

我想將XML轉換爲可讀的HTML。下面我將我的XML的示例部分放在一邊,我無法改變自己,需要一些幫助。 XML可能具有可變數量的列,這些列將由名稱col1,col2 --- colxxx生成。這裏如果ITEM =標籤我在他們的名字前加 我想把所有的<nonLog>記錄放在一張表中,而所有的<log>記錄都是明智的。 這意味着 我們將有 非日誌的形式1個 日誌表單1 非日誌形式2 然後日誌從2 ..等等等等第四使用XSLT將動態XML轉換爲多個HTML表格

<Post> 
     <FormData> 
     <SUBJECT>94</SUBJECT> 
     <FORM_OID>TOX</FORM_OID> 
     <NonLog> 
      <ID>1</ID> 
      <SUBJECT_ID>94</SUBJECT_ID> 
      <FORM_OID>TOX</FORM_OID> 
      <ITEM>Label</ITEM> 
      <col1>Visit</col1> 
      <col2> AV</col2> 
      <col3>AC</col3> 
     </NonLog> 
     <NonLog> 
      <ID>2</ID> 
      <SUBJECT_ID>94</SUBJECT_ID> 
      <FORM_OID>TOX</FORM_OID> 
      <ITEM>Data</ITEM> 
      <col1>1t</col1> 
      <col2>No</col2> 
      <col3></col3> 
     </NonLog> 
     <Log> 
      <ID>5</ID> 
      <SUBJECT_ID>94</SUBJECT_ID> 
      <FORM_OID>TOX</FORM_OID> 
      <ITEM>Label</ITEM> 
      <LOG_REC_POSITION>1</LOG_REC_POSITION> 
      <col1>Pat Name</col1> 
      <col2>Doc Name</col2> 
     </Log> 
     <Log> 
      <ID>5</ID> 
      <SUBJECT_ID>94</SUBJECT_ID> 
      <FORM_OID>TOX</FORM_OID> 
      <ITEM>Label</ITEM> 
      <LOG_REC_POSITION>1</LOG_REC_POSITION> 
      <col1>Sam</col1> 
      <col2>Dr Mike</col2> 
     </Log> 
    </Form Data> 
    <FormData> 
     <SUBJECT>94</SUBJECT> 
     <FORM_OID>TOX2</FORM_OID> 
     <NonLog> 
      <ID>1</ID> 
      <SUBJECT_ID>94</SUBJECT_ID> 
      <FORM_OID>TOX2</FORM_OID> 
      <ITEM>Label</ITEM> 
      <col1>Visit</col1> 
      <col2> AV</col2> 
      <col3>AC</col3> 
     </NonLog> 
     <NonLog> 
      <ID>2</ID> 
      <SUBJECT_ID>94</SUBJECT_ID> 
      <FORM_OID>TOX2</FORM_OID> 
      <ITEM>Data</ITEM> 
      <col1>1t</col1> 
      <col2>No</col2> 
      <col3></col3> 
     </NonLog> 
     <Log> 
      <ID>5</ID> 
      <SUBJECT_ID>94</SUBJECT_ID> 
      <FORM_OID>TOX2</FORM_OID> 
      <ITEM>Label</ITEM> 
      <LOG_REC_POSITION>1</LOG_REC_POSITION> 
      <col1>Pat Name</col1> 
      <col2>Doc Name</col2> 
     </Log> 
     <Log> 
      <ID>5</ID> 
      <SUBJECT_ID>94</SUBJECT_ID> 
      <FORM_OID>TOX2</FORM_OID> 
      <ITEM>Label</ITEM> 
      <LOG_REC_POSITION>1</LOG_REC_POSITION> 
      <col1>Sam</col1> 
      <col2>Dr Mike</col2> 
     </Log> 
    </Form Data> 
    </Post> 

預期的HTML輸出是

<Table> 
    <tr><td> 
    <table> 
     <tr><td><b>visit no</b></td></tr> 
     <tr><td>1</td></tr> 
     <tr><td><b>Date</b></td></tr> 
     <tr><td>8/11/2018</td></tr> 
    </table>  
    </td></tr> 
    <table> 
     <tr><td><b>Pat Name</b></td><td><b>Doc Name</b></td></tr> 
     <tr><td>Sam Hul</td><td>Dr Mike</td></tr> 
    </table><table> 
     <tr><td><b>visit no</b></td></tr> 
     <tr><td>1</td></tr> 
     <tr><td><b>Date</b></td></tr> 
     <tr><td>8/11/2018</td></tr> 
    </table>  
    </td></tr> 
    <table> 
     <tr><td><b>Pat Name</b></td><td><b>Doc Name</b></td></tr> 
     <tr><td>Sam Hul</td><td>Dr Mike</td></tr> 
    </table> 

</table> 
+0

您可以使用XSLT 2.0嗎? –

+0

可能是的..會有更多的幫助。 –

+0

是的。這基本上是一個分組問題,而XSLT 2.0具有分組功能。 –

回答

1

有可能,有可能是這樣的形式多個標籤。但是 整個表單是Log或Non_log類型。所以我們只需要一個表格中的兩個 表。

如果是這樣,您可以簡單地對兩個表進行硬編碼。

試着這麼做:

XSLT 1.0

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

<xsl:template match="/Post"> 
    <html> 
     <body> 
      <table> 
       <tr> 
        <xsl:apply-templates select="FormData/NonLog[1]" mode="header"/> 
       </tr> 
       <xsl:apply-templates select="FormData/NonLog[position() > 1]" /> 
      </table>  
      <table> 
       <tr> 
        <xsl:apply-templates select="FormData/Log[1]" mode="header"/> 
       </tr> 
       <xsl:apply-templates select="FormData/Log[position() > 1]" /> 
      </table>  
     </body> 
    </html> 
</xsl:template> 

<xsl:template match="FormData/*" mode="header"> 
    <xsl:for-each select="*[starts-with(name(), 'col')]"> 
     <th> 
      <xsl:value-of select="."/> 
     </th> 
    </xsl:for-each> 
</xsl:template> 

<xsl:template match="FormData/*"> 
    <tr> 
     <xsl:for-each select="*[starts-with(name(), 'col')]"> 
      <td> 
       <xsl:value-of select="."/> 
      </td> 
     </xsl:for-each> 
    </tr> 
</xsl:template> 

</xsl:stylesheet> 
+0

我可以看到格式化的數據。但有一個問題。 XML中有多種形式。非日誌中的所有數據都聚合在一起。這不應該發生。 –

+0

不知道是什麼問題。在你的問題中,你說:「*我想把所有的記錄放在一張表中,而所有的記錄都放在另一張表中。」「 –

+0

我已經更新了這個問題。每個XML中都有多個表單標籤。我想爲每個表單日誌和非日誌條目創建一個單獨的表。這意味着如果有兩種形式,則會創建4個表格。兩種表格在每種形式。 –