【问题标题】:What is the difference between name() and local-name()?name() 和 local-name() 有什么区别?
【发布时间】:2011-01-28 13:37:53
【问题描述】:

我不太明白 XPath 函数 namelocal-name 之间的区别。

您能否举例说明它们会有所不同的情况?

编辑

举个例子:

<?xml version="1.0" ?>
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
  <head></head>
</html>

我通过这两个查询得到相同的结果://*[local-name()="head"]//*[name()="head"]。这是为什么呢?

【问题讨论】:

    标签: xml xpath


    【解决方案1】:

    使用 XML

    <x:html xmlns:x="http://www.w3.org/1999/xhtml"/>
    

    样式表

    <xsl:stylesheet
      xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
      version="1.0">
    
      <xsl:output indent="yes"/>
    
      <xsl:template match="*">
        <local-name><xsl:value-of select="local-name()"/></local-name>
        <name><xsl:value-of select="name()"/></name>
      </xsl:template>
    
    </xsl:stylesheet>
    

    输出

    <local-name>html</local-name>
    <name>x:html</name>
    

    所以local-name() 结果没有任何前缀,the name() 结果可能包含前缀。

    在具有默认命名空间声明的示例中,不存在前缀,因此 name()local-name() 给出相同的结果。

    【讨论】:

    • 如果您的样式表包含具有不同前缀的 xhtml 命名空间,name() 会在输入 XML 中输出前缀。如果我希望前缀是样式表中定义的前缀怎么办?
    • 在命名空间轴上有命名空间节点,在 XSLT/XPath 2.0 中有一些函数可以操作和解析命名空间或查找像 w3.org/TR/xpath-functions/#func-in-scope-prefixes 这样的前缀,这当然可以应用于样式表中的节点好吧。您可以使用document('') 获取样式表的文档节点。如果您需要更多解释,请自行提出问题。
    • 嗨,我问过这个问题:stackoverflow.com/questions/21811344/…
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多