读XML in a Nutshell (8)

本篇包括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。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值