使用dom4j中的XPath查询 博客分类: dom4j dom4jxpath
http://www.ibm.com/developerworks/cn/xml/x-injava/#N100FD
为了方便用户更加快捷的查询,Dom4j支持灵活的Xpath,下面是经常用的语法
1. 格式:/element
涵义:表示到一个element元素的绝对路径
例子:root.selectSingleNode("restaurant/company");
结果:表示xml文件中根节点下的company节点
2. 格式:// element
涵义:表示在父节点下,所有名叫element的节点元素,不论层级
例子:root.selectNodes("//food")
结果:xml文件中,所有标记为food节点的集合
3. 格式1:/*
涵义:选择所有由星号之前的路径所定位的元素
例子1:root.selectNodes("/*")
结果1:得到的集合中只包含了restaurant节点
例子2:root.selectNodes("restaurant/company/*")
结果2:得到company节点下所有节点的集合
例子3:root.selectNodes("*/*/*/fruit")
结果3:得到除根节点下满足第四层元素为fruit的节点集合,本例子中只有一个
4. 格式:/aa/bb[n] n>=1
涵义1:表示aa节点下标记为bb的第n个元素
例子:restaurant.selectSingleNode("company/service/foods/food[2]")
结果:获得xml文件中foods节点下的第二个food节点
格式2:/aa/bb[last()]
涵义:表示aa节点下标记为bb的最后一个元素
例子:company.selectSingleNode("service/foods/food[last()]")
结果2:获得xml文件中foods节点下最后一个food节点
5. 格式1://@id
涵义:获得所有属性为id的Attribute对象集合
例子:root.selectNodes("//@price");
结果:获得xml文件中所有属性名为price的属性集合,本例子*有五个
格式2://name[@id]
涵义:获得所有属性为id的,并且标记为name节点元素集合
例子:root.selectNodes("//food[@price")];
结果:获得所有属性名为price的并且标记为food的节点集合,本例子*有4个
格式3://name[@*]
涵义:获得所有任意属性名的,并且标记为name节点元素集合
例子:root.selectNodes("//food[@*")];
结果:获得有任意属性名的并且标记为food的节点集合,本例子*有4个
格式4://name[not(@*)]
涵义:获得所有满足没有属性名的标记为name的节点元素集合
例子:root.selectNodes("//food[not(@*)]");
结果:获得所有形式如<food/>的节点集合,本例子*有0个
格式5://*[not(@*)]
涵义:获得所有满足没有属性名的节点元素集合
例子:root.selectNodes("//*[not(@*)]");
结果:获得xml文件中所有没有属性的节点集合,本例子*有10个
6. 格式://name[@id=’n’]
涵义:获得所有属性为id的,其值等于n的,并且标记为name节点元素集合
例子:root.selectSingleNode ("//food[@price ='2'];
结果:获得xml文件中标记为food,并且其price属性的值为2的节点
7. 格式://aaa | //bbb
涵义:|表示与关系,获得文档中所有标记为aaa或者bbb的元素集合
例子:root.selectNodes("//food | fruit");
结果:获得xml文件中所有标记为food和fruit的节点集合,本例子中有4个