读XML in a Nutshell (6)

本篇关于Chapter 9 XPath。
跟其他的语言一样,xpath expression由变量和操作构成。在变量的类型上,有Boolean,String,Number跟xpath独有的Node Set,需要注意的是,xpath是弱类型的语言,它会自动做类型转换,唯一例外的是Node Set不能由另外三种类型转换得到。在操作方面,xpath的操作是基于context(照我的理解,context包括current node set还有current node)的,也就是说由context跟input来决定output。其中操作包括运算符(+ - * DIV MOD = > < != ...),方法,还有location path,所有的操作都有返回值(也就意味着没有所谓void的方法)。location path是xpath特有的操作方式,它以Node Set作为返回值,它由若干的"location step + /"组成,每个location step由axis(可被简化) + node test + predicate(可省略,predicate是一个Boolean值)组成。
以下是要点:

1.Xpath处理的是xml中的root node,element nodes,text nodes,attribute nodes,comment nodes,processing-instruction nodes,namespace nodes。而像CDATA,entity reference,dtd这种xpath是不管的。对于xpath来说root node指的不是document element,而是包括document element,顶层comment,processing-instruction等等的整个文档。同时,像xmlns,xmlns:prefix这种不被作为attribute看待,而是被认为是attribute nodes。

2.Location step中,/开始表示从root node开始,是绝对地址,其他的为相对地址。使用“//”选择context node以下的所有节点,同时包括context node,使用“..”选择父节点,使用“.”选择context node。

3.Node test中,采用xxx(prefix:xxx)选择某个名称的element,采用*选择所有的element,采用@xxx(@prefix:xxx)选择某个名称的attribute,采用@*选择所有的attribute,采用comment(),text(),procession-instruction()(可以用input参数来选择某个target的processing instruction)分别选择相应的node,采用node()选择所有的node。通过使用“|”号可以以或的关系把若干node test组合起来构成新的node test。

4.在axis方面,axis可以被省略,这种情况下默认是往子节点方向,如果不被省略,格式为axis::node test。Axis的类型包括ancestor,following-sibling,following,preceding,namespace,descendant,ancestor-or-self。

5.Predicate被“[”“]”这两个符号围住,其中的expression会在每个context node下evaluate一次,如果最终结果是true或者可以被转化成true,则context node将被包含在返回值中。

6.关于不同的类型间的转换机制,还有常用的funcion,可以去查相关的reference。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值