XPath用法
2022-08-03 本文已影响0人
Silence_xl
通配符 描述
* 匹配任何节点。
@* 匹配任何属性
node() 匹配任何类型的节点
XPath表达式实例:
获取根节点下所有这个名字的节点—//节点名
比如要获取Config里面所有名字叫Cars的节点,表达式就可以填@”//Cars” 栗子如下
NSArray *datas = [rootElement nodesForXPath:@"//Cars" error:nil];
获取节点下的子节点—节点/子节点
举个栗子:获取Cars的节点里面的Car子节点
表达式-------- @"//Cars/Car"
获取节点里的属性—节点/@属性
举个栗子:获取Cars的id属性
表达式-------- @"//Cars/@id"
如果不知道属性名或者节点名还可以直接用*代替属性名,获取节点所有的属性或者子节点
表达式-------- @"//Cars/@*"获取Cars的所有属性
表达式-------- @"//Cars/*"获取Cars的所有所有子节点
多个节点路径的情况可以用’|’来分开,比如我只想要Cars里面的id和type属性,可以这么写
表达式-------- @"//Cars/@id | Cars/@type"
接下来就到高级一点的用法—-谓词
谓词可以嵌套在方括号里对查询结果根据你设定的条件进一步筛选
一个个介绍太麻烦了,直接上表达式实例吧
@"//Config/Cars[last()]" 获取Config里的最后一个节点
@"//Cars/Car[1]" 获取Cars里面的第一个Car节点
@"//Cars/Car[last()-1]" 获取Cars里面的倒数第二个Car节点
@"//Cars/Car[position()<3]" 获取Cars里面的前2个Car节点
@"//Cars/Car[@id]" 获取Cars里面的有属性id的Car
@"//Cars/Car[@id = 941]" 获取Cars里面属性id为941的Car节点
@"//Cars[@type = 'cargroup']" 获取Config里面属性type为cargroup的节点
@"//Cars/Car[txt = '水冷系统']" 获取Cars里面txt为水冷系统的Car节点
@"//Cars/Car[@id > 30]" 获取Cars里面属性id大于30的Car节点
@"//Cars/Car[@id > 30]/txt" 获取Cars里面属性大于30的Car节点里的txt子节点
@"//Cars/Car[@id = 941]/ecu/@*" 获取Cars里面id=941的Car节点里面的ecu子节点的所有属性
这就是我所知道的XPath的全部用法了,还有什么特别姿势请小伙伴们帮我解锁吧