我正在尝试使用 XSLT 样式表转换 XHTML,但我什至无法获得基本样式表来匹配任何内容。我确信我错过了一些简单的事情。
这是我的 XHTML 源文档(没什么大惊喜):
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta name="generator" content=
"HTML Tidy for Windows (vers 25 March 2009), see www.w3.org" />
...
</body>
</html>
实际内容并不重要,我将在下面演示。顺便说一句,我很确定该文档格式良好,因为它是通过创建的tidy -asxml
.
我的更复杂的 XPath 表达式没有返回任何结果,因此作为健全性测试,我尝试使用以下样式表非常简单地对其进行转换:
<?xml version="1.0"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="text" omit-xml-declaration="yes" indent="no"/>
<xsl:template match="/">
<xsl:text>---[</xsl:text>
<xsl:for-each select="html">
<xsl:text>Found HTML element.</xsl:text>
</xsl:for-each>
<xsl:text>]---</xsl:text>
</xsl:template>
</xsl:stylesheet>
转换是通过完成的xsltproc --nonet stylesheet.xsl input.html
,输出为:“---[]---”(即,它没有找到html
)。但是,如果我改变for-each
部分至:
<xsl:for-each select="*">
<xsl:value-of select="name()"/>
</xsl:for-each>
然后我得到“---[html]---”。同样,如果我使用for-each select="*/*"
正如我所期望的,我得到“---[headbody]---”。
为什么它可以通过以下方式找到子元素*
(with name()
给出正确的名称)但直接使用元素名称找不到它?