XPath学习:轴(13)——namespace

     XPath 是一门在 XML 文档中查找信息的语言。XPath 可用来在 XML 文档中对元素和属性进行遍历。

     XPath 是 W3C XSLT 标准的主要元素,并且 XQuery 和 XPointer 同时被构建于 XPath 表达之上。

     推荐一个挺不错的网站:http://www.zvon.org/xxl/XPathTutorial/General_chi/examples.html  里面有很不错的例子,下面的例子中红色字体表示使用对 应语法获取的元素(或属性)。

     XPath轴(XPath Axes)可定义某个相对于当前节点的节点集:

     1、child  选取当前节点的所有子元素

     2、parent  选取当前节点的父节点

     3、descendant 选取当前节点的所有后代元素(子、孙等)

     4、ancestor  选取当前节点的所有先辈(父、祖父等)

     5、descendant-or-self 选取当前节点的所有后代元素(子、孙等)以及当前节点本身

     6、ancestor-or-self  选取当前节点的所有先辈(父、祖父等)以及当前节点本身

     7、preceding-sibling 选取当前节点之前的所有同级节点

     8、following-sibling 选取当前节点之后的所有同级节点

     9、preceding   选取文档中当前节点的开始标签之前的所有节点

     10、following   选取文档中当前节点的结束标签之后的所有节点

     11、self 选取当前节点

     12、attribute  选取当前节点的所有属性

     13、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

posted @ 2009-09-10 22:29  Asharp  阅读(3365)  评论(0编辑  收藏  举报