我无法获得head / title元素的值,如下所示。
<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:xs="http://www.w3.org/2001/XMLSchema"
xmlns:h="http://www.w3.org/1999/xhtml"
version="2.0" >
<xsl:output method="text" indent="yes"/>
<xsl:template match="h:title">
<xsl:value-of select="."/>
</xsl:template>
</xsl:stylesheet>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<style type="text/css">
.AlignLeft { text-align: left; }
.AlignCenter { text-align: center; }
.AlignRight { text-align: right; }
</style>
<title>Doc title</title>
</head>
<body>
body
</body>
</html>
java -jar saxon9he.jar -xsl:style.xsl -s:test.html
输出:
.AlignLeft { text-align: left; }
.AlignCenter { text-align: center; }
.AlignRight { text-align: right; }
Doc title
body
预期产出:
Doc title
答案 0 :(得分:0)
您遇到的行为是因为XSLT built-in template rules。这些适用于XSLT正在寻找与节点匹配的模板,但不会出现在XSLT中。
目前,XSLT将查找与style
和body
匹配的模板,但找不到,因此内置模板将应用并最终输出文本。
您可以做的是明确告诉XSLT只选择title
,如下所示:
<xsl:template match="/">
<xsl:apply-templates select="/h:html/h:head/h:title"/>
</xsl:template>
或者,添加一个模板,该模板会覆盖停止输出任何文本的内置模板:
<xsl:template match="text()" />
将这些模板中的任何一个添加到现有的XSLT中都应该有效。