我从XML文件中获取数据并使用XSLT对其进行转换。我有一个节点,我想从中创建一个表。
<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:variable name="file" select="document('file.xml')"/>
<xsl:template match="/">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title></title>
</head>
<body>
<table>
<xsl:value-of select="$file/Workbook/Worksheet/Table"/>
</table>
</body>
</html>
//output: id firstname lastname 8 Jonas Berg 15 Adam Jones ...
我希望桌子看起来像:
id firstname lastname
8 Jonas Berg
...
我能这样做吗?
表中的XML示例:
<Row>
<Cell ss:Index="2"><Data ss:Type="String">id</Data></Cell>
<Cell ss:StyleID="s62"><Data ss:Type="String">firstname</Data></Cell>
<Cell><Data ss:Type="String">lastname</Data></Cell>
</Row>
<Row>
<Cell ss:Index="2"><Data ss:Type="Number">8</Data></Cell>
<Cell ss:StyleID="s62"><Data ss:Type="String">Jonas</Data></Cell>
<Cell><Data ss:Type="String">Berg</Data></Cell>
</Row>
答案 0 :(得分:1)
这很简单。唯一的挑战是使XML命名空间正确。
<xsl:stylesheet
version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:ss="urn:schemas-microsoft-com:office:spreadsheet"
xmlns="http://www.w3.org/1999/xhtml"
>
<xsl:output
type="xml"
doctype-public="-//W3C//DTD XHTML 1.0 Strict//EN"
doctype-system="http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"
/>
<xml:strip-space elements="*" />
<xsl:template match="/">
<head>
<title></title>
</head>
<body>
<table>
<xsl:apply-templates />
</table>
</body>
</xsl:template>
<xsl:template match="Row">
<tr><xsl:apply-templates /></tr>
</xsl:template>
<xsl:template match="Cell">
<td><xsl:apply-templates /></td>
</xsl:template>
<xsl:template match="Data">
<xsl:value-of select="." />
</xsl:template>
</xsl:stylesheet>
注释
ss
。doctype-public
和doctype-system
属性为XHTML创建了正确的doctype声明。<Row>
转换为<tr>
和<Cell>
转换为<td>
,这可以通过两个简单的模板轻松完成。 <xsl:template match="Data[@ss:Type='Number']">
,以不同的格式输出某些数据类型。