【问题标题】:<xsl:value-of select="document(content)//title"/> returns empty node<xsl:value-of select="document(content)//title"/> 返回空节点
【发布时间】:2010-03-23 08:04:25
【问题描述】:

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

【问题讨论】:

    标签: html xslt


    【解决方案1】:

    更多代码会有所帮助,但在这种情况下,首先要责备的是命名空间。我可以看到您的节点位于 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
    

    【讨论】:

    • 我应该怎么做才能解决这个问题?
    【解决方案2】:

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

    此外,包含// 的 XPath 表达式通常比不包含的 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"/>
    

    【讨论】:

    • 我怎么知道要使用什么命名空间?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-09-01
    • 2015-06-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-08-21
    相关资源
    最近更新 更多