您的位置:首页 > 运维架构 > Shell

读XML in a Nutshell (8)

2006-06-29 10:14 330 查看
本篇包括Chapter 11 XPointers。
XPointer是通过在一般的url后面加#号来指定某个url里面的某些内容。它基于xpath,同时也对xpath进行的一些扩充,在数据类型上增加了point跟range两种类型,同时增加了遇这些类型相关的方法(除此之外还有一些与xpoi nter相关的特殊方法)。在xpath的基础上,它也提供了一些常用xpath的简化表达方式。
要点如下:

1.使用xpath的格式为xpointer(xpath expression),在此之上,xpointer可以由若干上述表达式构成,如果第一个表达式无法定为到任何内容,则采用第二个表达式,以此类推。如果xpointer里面用到的某些字符在url下是不合法的,则必须用UTF-8 encoding来escape。XPointer可以跟xlink混合使用,同时如果某个xpointer是指向当前文档,则可省略url,直接用#开头,例子如下: http://www.cafeconleche.org/people.xml#xpointer(//name[position( )=1])
#xpointer(//first_name)xpointer(//last_name)xpointer(//middle_initial)

2.当要定位到含有ID类型的attribute的element时,可以直接在#后面加id值,当要选择root node下面的第n个子节点的第m个子节点(以此类推),可以使用/n/m/i/j/k的表达方式。例子如下:
<div1 id='sec-intro'> http://www.w3.org/TR/1999/REC-xml-names-19990114/xml-names.xml#sec-intro http://www.w3.org/TR/1999/REC-xml-names-19990114/xml-names.xml#/1/2/1
3.当要使用到namespace的时候,可以提前用xmlns(prefix=URI)来声明,当需要用到多个namespace的时候,可以用多个xmlns来声明,需要注意的是,xml文档中的namespace声明不会影响xpointer中的namespace声明,所以任何需要被xpointer用到的namespace都必须明确声明,我想这应该是为了保证xpointer的可移植性,就是在某份xml文档中的xpointer,只要被复制下来,放到任何地方都能指向同个地址。

4.XPointer中的point被定义如下,如果context node是只含有string,那么point就在string的前后以及每个character的中间,否则,point就在element的start tag之后,end tag之前,以及每个子node的中间。Range则由两个point构成,表示这两个point中间的内容,range所表示的内容不一定要是well formed。跟point相关的函数有start-point(),end-point()等,跟range相关的函数有range(),range-to(),range-inside(),string-range()。

5.XPointer中有一些特殊的函数,比如here()表示包含这个xpointer的node,origin()表示在历史纪录中含有打开当前文档的link的那个node。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: