2016-08-11 40 views
0

我想將XML轉換爲可讀的HTML。 下面我將我的XML的示例部分,我無法改造自己,需要一些幫助。使用XSLT將動態XML轉換爲HTML

XML可能具有可變數量的列,將由名稱col1,col2---colxxx生成。這裏如果ITEM =標籤,我在他們的名字前加上<B>

示例XML是如下

<Root> 
    <row ID="1" ITEM="Label" col1="visit no"> 
    <row ID="1" ITEM="Data" col1="1"> 
    <row ID="1" ITEM="Label" col1="Date"> 
    <row ID="1" ITEM="Data" col1="8/11/2018"> 
    <row ID="1" ITEM="Label" col1="PatName" col2="DocName" col3="DocName" /> 
    <row ID="2" ITEM="Data" col1="Sam Hul" col2="Dr Mike" col3="Vegas Hospital"/> 
    <row ID="2" ITEM="Data" col1="Dan Brown" col2="Dr Matt" col3="California Hospital"/> 

我想上面的XML轉換成HTML內容下方。正在使用循環生成col1,col2,col3。所以他們將有名字後會有一個增量數字。

預期的輸出HTML是

<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> 
    <tr><td><b>PatName</b></td><td><b>DocName</b></td><td><b>DocName</b></td></tr> 
    <tr><td>Sam Hul</td><td>Dr Mike</td><td>Vegas Hospital</td></tr> 
    <tr><td>Dan Brown</td><td>Dr Matt</td><td>California Hospital</td></tr> 
</table> 

這就是我想在這個moment.Buts其生成單一TR

<tr> 
     <xsl:for-each select="row/@*"> 
        <td><xsl:value-of select="."/></td> 
     </xsl:for-each> 
    </tr> 
+0

你究竟在哪裏堅持下去? –

+0

@ michael.hor257k如何使用colxxx在每一行節點中統計標籤數量 –

+0

爲什麼需要對它們進行計數? - 請張貼您的樣式表,以便我們可以解決您遇到問題的問題。我們不在這裏爲你寫代碼。 –

回答

1

---響應變化的reqirement編輯---

這是一個奇怪的方式來建立一個表,但如果這就是你想要的,嘗試:

XSLT 1.0

<xsl:stylesheet version="1.0" 
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> 
<xsl:output method="xml" omit-xml-declaration="yes" version="1.0" encoding="utf-8" indent="yes"/> 

<xsl:template match="/Root"> 
    <table border="1"> 
     <xsl:for-each select="row"> 
      <tr> 
       <xsl:apply-templates select="@*[starts-with(name(), 'col')]"/> 
      </tr> 
     </xsl:for-each> 
    </table> 
</xsl:template> 

<xsl:template match="@*[../@ITEM='Label']"> 
    <th> 
     <xsl:value-of select="."/> 
    </th> 
</xsl:template> 

<xsl:template match="@*"> 
    <td> 
     <xsl:value-of select="."/> 
    </td> 
</xsl:template> 

</xsl:stylesheet> 

應用於一個合式 XML輸入(!):

XML

<Root> 
    <row ID="1" ITEM="Label" col1="visit no"/> 
    <row ID="1" ITEM="Data" col1="1"/> 
    <row ID="1" ITEM="Label" col1="Date"/> 
    <row ID="1" ITEM="Data" col1="8/11/2018"/> 
    <row ID="1" ITEM="Label" col1="PatName" col2="DocName" col3="DocName" /> 
    <row ID="2" ITEM="Data" col1="Sam Hul" col2="Dr Mike" col3="Vegas Hospital"/> 
    <row ID="2" ITEM="Data" col1="Dan Brown" col2="Dr Matt" col3="California Hospital"/> 
</Root> 

的(渲染)結果將是:

enter image description here

+0

感謝您的回答。但是有一個小問題。 :)該XML中有許多標籤。這段代碼將所有標題打印在頂部。我只需要按照順序放入XML中,只需要在ITEM ='Label'時加粗。 –

+0

請編輯您的問題,並顯示具有多個'標籤'行的輸入示例以及期望的輸出。 –

+0

我有更新的問題。感謝您的幫助! –