通配符 描述
* 匹配任何節(jié)點(diǎn)。
@* 匹配任何屬性
node() 匹配任何類型的節(jié)點(diǎn)
XPath表達(dá)式實(shí)例:
獲取根節(jié)點(diǎn)下所有這個(gè)名字的節(jié)點(diǎn)—//節(jié)點(diǎn)名
比如要獲取Config里面所有名字叫Cars的節(jié)點(diǎn),表達(dá)式就可以填@”//Cars” 栗子如下
NSArray *datas = [rootElement nodesForXPath:@"http://Cars" error:nil];
獲取節(jié)點(diǎn)下的子節(jié)點(diǎn)—節(jié)點(diǎn)/子節(jié)點(diǎn)
舉個(gè)栗子:獲取Cars的節(jié)點(diǎn)里面的Car子節(jié)點(diǎn)
表達(dá)式-------- @"http://Cars/Car"
獲取節(jié)點(diǎn)里的屬性—節(jié)點(diǎn)/@屬性
舉個(gè)栗子:獲取Cars的id屬性
表達(dá)式-------- @"http://Cars/@id"
如果不知道屬性名或者節(jié)點(diǎn)名還可以直接用*代替屬性名,獲取節(jié)點(diǎn)所有的屬性或者子節(jié)點(diǎn)
表達(dá)式-------- @"http://Cars/@*"獲取Cars的所有屬性
表達(dá)式-------- @"http://Cars/*"獲取Cars的所有所有子節(jié)點(diǎn)
多個(gè)節(jié)點(diǎn)路徑的情況可以用’|’來(lái)分開,比如我只想要Cars里面的id和type屬性毁枯,可以這么寫
表達(dá)式-------- @"http://Cars/@id | Cars/@type"
接下來(lái)就到高級(jí)一點(diǎn)的用法—-謂詞
謂詞可以嵌套在方括號(hào)里對(duì)查詢結(jié)果根據(jù)你設(shè)定的條件進(jìn)一步篩選
一個(gè)個(gè)介紹太麻煩了,直接上表達(dá)式實(shí)例吧
@"http://Config/Cars[last()]" 獲取Config里的最后一個(gè)節(jié)點(diǎn)
@"http://Cars/Car[1]" 獲取Cars里面的第一個(gè)Car節(jié)點(diǎn)
@"http://Cars/Car[last()-1]" 獲取Cars里面的倒數(shù)第二個(gè)Car節(jié)點(diǎn)
@"http://Cars/Car[position()<3]" 獲取Cars里面的前2個(gè)Car節(jié)點(diǎn)
@"http://Cars/Car[@id]" 獲取Cars里面的有屬性id的Car
@"http://Cars/Car[@id = 941]" 獲取Cars里面屬性id為941的Car節(jié)點(diǎn)
@"http://Cars[@type = 'cargroup']" 獲取Config里面屬性type為cargroup的節(jié)點(diǎn)
@"http://Cars/Car[txt = '水冷系統(tǒng)']" 獲取Cars里面txt為水冷系統(tǒng)的Car節(jié)點(diǎn)
@"http://Cars/Car[@id > 30]" 獲取Cars里面屬性id大于30的Car節(jié)點(diǎn)
@"http://Cars/Car[@id > 30]/txt" 獲取Cars里面屬性大于30的Car節(jié)點(diǎn)里的txt子節(jié)點(diǎn)
@"http://Cars/Car[@id = 941]/ecu/@*" 獲取Cars里面id=941的Car節(jié)點(diǎn)里面的ecu子節(jié)點(diǎn)的所有屬性
這就是我所知道的XPath的全部用法了,還有什么特別姿勢(shì)請(qǐng)小伙伴們幫我解鎖吧