我无法使用xslt将xhtml文件转换为csv。 xhtml文件如下所示:
<?xml version="1.0" encoding="UTF-8"?>
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title>Flight details</title>
</head>
<body>
<h1>Flight details</h1>
<ul>
<li id="nam">BLA145</li>
<li id="reg">YK-LOL</li>
<li id="hex">000100</li>
<li id="alt">34950</li>
<li id="spd">457</li>
<li id="hdg">117</li>
<li id="sqk">4774</li>
</ul>
</body>
</html>
样式表如下:
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:xhtml="http://www.w3.org/1999/xhtml"
exclude-result-prefixes="xhtml xsl">
<xsl:output method="text" encoding="UTF-8"/>
<xsl:template match="/">
<xsl:apply-templates select="html/body/ul/*"/>
</xsl:template>
<xsl:template match="li[@id='nam']">
<xsl:value-of select="."/>,
</xsl:template>
<xsl:template match="li[@id='reg']">
<xsl:value-of select="."/>,
</xsl:template>
<xsl:template match="li[@id='hex']">
<xsl:value-of select="."/>,
</xsl:template>
<xsl:template match="li[@id='alt']">
<xsl:value-of select="."/>,
</xsl:template>
<xsl:template match="li[@id='spd']">
<xsl:value-of select="."/>,
</xsl:template>
<xsl:template match="li[@id='hdg']">
<xsl:value-of select="."/>,
</xsl:template>
<xsl:template match="li[@id='sqk']">
<xsl:value-of select="."/>
</xsl:template>
</xsl:stylesheet>
这将导致无输出。我发现如果我删除
xmlns="http://www.w3.org/1999/xhtml"
来自<html >
标记,然后将正确生成csv。
这是命名空间问题吗?我怎么能解决它?
谢谢!
答案 0 :(得分:1)
您缺少html元素的名称空间前缀(xhtml:
)。由于您的输出包含ul
的所有子项,因此您甚至可以使用此样式表而不是为每个子项编写模板:
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:xhtml="http://www.w3.org/1999/xhtml" exclude-result-prefixes="xhtml xsl">
<xsl:output method="text" encoding="UTF-8"/>
<xsl:template match="/">
<xsl:for-each select="xhtml:html/xhtml:body/xhtml:ul/*">
<xsl:value-of select="."/>
<xsl:if test="position() != last()">,</xsl:if>
</xsl:for-each>
</xsl:template>
</xsl:stylesheet>