Xml name()和local-name()之间有什么区别?

Xml name()和local-name()之间有什么区别?,xml,xpath,Xml,Xpath,我不太理解XPath函数和XML函数之间的区别 你能举一个他们会有不同的情况的例子吗 编辑 举个例子: <?xml version="1.0" ?> <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en"> <head></head> </html> 我在这两个查询中得到了相同的结果:/*[local-name()=“head”]和/*[name()

我不太理解XPath函数和XML函数之间的区别

你能举一个他们会有不同的情况的例子吗

编辑 举个例子:

<?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

<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>
html
x:html
因此,
local-name()
结果没有任何前缀,
name()
结果可能包含前缀


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

如果样式表包含带有不同前缀的xhtml名称空间,name()会在输入XML中输出前缀。如果我希望前缀是样式表中定义的前缀,该怎么办?在名称空间轴上有名称空间节点,在XSLT/XPath 2.0中,有一些函数可以操作和解析名称空间,或者查找前缀,当然这些前缀也可以应用于样式表中的节点。您可以使用
document(“”)
获得样式表的文档节点。如果你需要更多的解释,你可以自己问一个问题。嗨,我问了一个关于这个的问题: