我想将XML转换为可读的HTML。 下面我将放置我的XML样本部分,我无法改变自己并需要一些帮助。
XML可能具有可变数量的列,这些列将由名称col1,col2---colxxx
生成。这里如果ITEM = Label我在名字之前添加<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。所以他们的名字将在col之后有一个增量数字。
预期的输出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>
这就是我现在正在尝试的。它产生单个TR
<tr>
<xsl:for-each select="row/@*">
<td><xsl:value-of select="."/></td>
</xsl:for-each>
</tr>
答案 0 :(得分:1)
---为响应变更要求而编辑---
这是一种建立桌子的奇怪方式,但如果这是你想要的,请尝试:
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>
(渲染)结果将是: