<xsl:value-of select =“document(content)// title”>返回空节点</xsl:value-of>

时间:2010-03-23 08:04:26

标签: html xslt

我正在尝试获取简单的html文档的标题来构建站点地图。但总是返回空值。我调试它并发现文档(内容)返回文档节点。它看起来像这样。alt text http://www.freeimagehosting.net/uploads/f7caf412dc.png但我无法访问文档(内容)/ html或类似的东西。请帮忙!

2 个答案:

答案 0 :(得分:2)

更多代码会有所帮助,但在这种情况下,第一个责任是命名空间。我可以看到你的节点在XHTML命名空间中,但你没有在XPath中使用任何命名空间前缀。

您必须在样式表中声明名称空间前缀,如下所示:

<xsl:stylesheet 
  version="1.0" 
  xmlns:xsl="http://www.w3.org/1999/XSL/Transform" 
  xmlns:h="http://www.w3.org/1999/xhtml"
>

然后在你的XPath中使用这个前缀:

document(content)/h:html

答案 1 :(得分:1)

如果您的xml元素位于命名空间中,即使它是文档的默认命名空间,您也必须在任何XPath表达式和模板匹配规则中使用命名空间前缀。它是名称空间uri而不是重要的前缀。请注意,属性不在默认命名空间中,如果它们的名称具有前缀,它们只有一个命名空间。

此外,包含//的XPath表达式的效率通常低于不包含<xsl:stylesheet version="1.0" xmlns:h="http://www.w3.org/1999/xhtml" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> <!-- and elsewhere in your stylesheet --> <xsl:value-of select="document(content)/h:html/h:head/h:title"/> 的表达式。

{{1}}