我XML
包含如下数据:
<?xml version="1.0" encoding="utf-8"?>
<dataset xmlns:xs="http://www.w3.org/2001/XMLSchema-instance">
<metadata>
<item name="Revenue" type="xs:decimal" scale="2" precision="31"/>
<item name="Month" type="xs:short" precision="1"/>
</metadata>
<data>
<row>
<value currency="USD">100000</value>
<value>1</value>
</row>
<row>
<value currency="USD">200000.16</value>
<value>2</value>
</row>
<row>
<value currency="USD">150000.9</value>
<value>3</value>
</row>
<row>
<value currency="USD">180000.07</value>
<value>4</value>
</row>
</data>
</dataset>
我希望将此XML
转换为HTML
表,如下所示:
<table border="1">
<tr bgcolor="#9acd32">
<th style="text-align:left">Revenue</th>
<th style="text-align:left">Month</th>
</tr>
<tr>
<td>100000</td>
<td>1</td>
</tr>
<tr>
<td>200000.16</td>
<td>2</td>
</tr>
<tr>
<td>150000.9</td>
<td>3</td>
</tr>
<tr>
<td>180000.07</td>
<td>4</td>
</tr>
</table>
有谁能告诉我怎么做?感谢。
答案 0 :(得分:2)
此样式表将执行此操作:
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
version="1.0">
<xsl:output method="html"/>
<xsl:template match="dataset">
<table border="1"><xsl:apply-templates /></table>
</xsl:template>
<xsl:template match="metadata">
<tr bgcolor="#9acd32">
<th style="text-align:left"><xsl:value-of select="item[1]/@name"/></th>
<th style="text-align:left"><xsl:value-of select="item[2]/@name"/></th>
</tr>
</xsl:template>
<xsl:template match="row">
<tr><xsl:apply-templates /></tr>
</xsl:template>
<xsl:template match="value">
<td><xsl:value-of select="."/></td>
</xsl:template>
</xsl:stylesheet>
这是它的工作原理:
处理器将读取模板中的每个节点。从根/
开始(它有一个隐式模板),它将处理每个节点,如果有匹配的模板,它将根据模板转换节点。
如果其中包含<xsl:apply-templates>
元素,则模板可以允许其他节点的递归处理。因此,处理器找到dataset
,将其与第一个模板匹配,添加<table>
元素,并在表内,将处理器发送到下一个模板。它将处理metadata
并完成该子树,然后它将处理data
。由于data
没有明确的匹配模板,因此它再次使用默认隐式模板,该模板匹配没有显式模板的每个可到达节点。该模板允许处理树的其余部分row
,其中包含apply-templates
和value
。
多次处理模板以呈现生成的HTML。