首页 > 技术文章 > XPath学习13:namespace

zhanglinfei 2019-09-06 14:23 原文

namespace 选取当前节点的所有命名空间节点

名称空间轴用来选取名称空间结点。每个元素结点都有一个专门名称空间结点表示每个作用域名称空间。

分析下面的XML源文档(xmmlBook.xml):

<xmml:Book xmlns:xmml="http://www.XMML.com/namespaces">

<xmml:Chapter number="1">Some text.</xmml:Chapter>

<xmml:Chapter number="2">Some more text.</xmml:Chapter>

</xmml:Book>

为了说明xmml:Book元素结点的名称空间结点,需要使用下面的样式表(xmmlBook.xslt):

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

xmlns:xmml="http://www.XMML.com/namespaces" >

<xsl:template match="/">

<html>

<head>

<title>This shows namespace nodes.</title>

</head>

<body>

<h3>Namespace nodes of the xmml:Book element.</h3>

<xsl:apply-templates select="/xmml:Book" />

</body>

</html>

</xsl:template>

<xsl:template match="xmml:Book">

<xsl:for-each select="namespace::node()">

<p><xsl:value-of select="position()" />. The namespace prefix

<b><xsl:value-of select="name(.)" /></b> has the namespace URI <b><xsl:value-of

select="." /></b>. </p>

</xsl:for-each>

</xsl:template>

</xsl:stylesheet>

注意名称空间声明,在xmml:Book元素上使用了xmml名称空间前缀,如下所示:

<xmml:Book xmlns:xmml="http://www.XMML.com/namespaces">

正如图7-4所示,xmml:Book元素结点有两个名称空间。其中一个名称空间结点是http://www.XMML.com/namespaces的URI,这并不令我们感到意外,因为这已经在名称空间声明中很清楚地表示出来。但是,另一个名称空间结点是http://www.w3.org/XML/1998/ namespace的URI,这有一点出乎我们的意料。之所以有这个名称空间结点,是因为所有的XML元素结点都有一个与此URI对应的名称空间。记住,在任何XML元素上都可以使用xml:lang和xml:space属性,因此必须声明xml名称空间。对于本例的情形,所有的XML处理器都自带了名称空间声明。

image

推荐阅读