在Dom4j中使用xpath
2008-09-27 13:28
330 查看
String xmlName = path + "/" + userName + ".xml";
// 定义需要返回的第一级菜单的名字集合
List firstNames = new ArrayList();
// Attribute的属性集合
List attrs = new ArrayList();
// 声明SAXReader
SAXReader saxReader = new SAXReader();
try {
Document doc = saxReader.read(xmlName);
// 获得所有grade=1的Element的text的值
String xpath = "/tree/item";
List list = doc.selectNodes(xpath);
Iterator it = list.iterator();
while (it.hasNext()) {
Element elt = (Element) it.next();
Attribute attr = elt.attribute("grade");
System.out.println(attr.getValue());
if (new Integer(attr.getValue()).intValue() == 1) {
attr = elt.attribute("text");
attrs.add(attr.getValue());
System.out.println(attr.getValue());
}
}
} catch (DocumentException e) {
e.printStackTrace();
}
return attrs;
String xmlName = path + "/" + userName + ".xml"; // 定义需要返回的第一级菜单的名字集合 List firstNames = new ArrayList(); // Attribute的属性集合 List attrs = new ArrayList(); // 声明SAXReader SAXReader saxReader = new SAXReader(); try { Document doc = saxReader.read(xmlName); // 获得所有grade=1的Element的text的值 String xpath = "/tree/item"; List list = doc.selectNodes(xpath); Iterator it = list.iterator(); while (it.hasNext()) { Element elt = (Element) it.next(); Attribute attr = elt.attribute("grade"); System.out.println(attr.getValue()); if (new Integer(attr.getValue()).intValue() == 1) { attr = elt.attribute("text"); attrs.add(attr.getValue()); System.out.println(attr.getValue()); } } } catch (DocumentException e) { e.printStackTrace(); } return attrs;
还有一个是获取某个节点下面里的所有第一级子节点,而不是所有的节点(包括子节点和孙节点).
Java代码
![](http://itren.javaeye.com/images/icon_copy.gif)
public static List getSecondMenuNames(String textName, String path,
String userName) {
String xmlName = path + "/" + userName + ".xml";
String name = textName;
// 定义需要返回的第二级菜单的名字集合
List firstNames = new ArrayList();
// Attribute的属性集合
List attrs = new ArrayList();
// 声明SAXReader
SAXReader saxReader = new SAXReader();
try {
Document doc = saxReader.read(xmlName);
// 这个xpath的意思是,获取text='系统管理'的一个Item下的所有Item的节点
String xpath = "//item[@text='" + name + "']/child::*";
List list = doc.selectNodes(xpath);
Iterator it = list.iterator();
while (it.hasNext()) {
Element elt = (Element) it.next();
Attribute attr = elt.attribute("grade");
System.out.println(attr.getValue());
attr = elt.attribute("text");
System.out.println(attr.getValue());
attrs.add(attr.getValue());
}
} catch (Exception e) {
e.printStackTrace();
}
return attrs;
}
public static List getSecondMenuNames(String textName, String path, String userName) { String xmlName = path + "/" + userName + ".xml"; String name = textName; // 定义需要返回的第二级菜单的名字集合 List firstNames = new ArrayList(); // Attribute的属性集合 List attrs = new ArrayList(); // 声明SAXReader SAXReader saxReader = new SAXReader(); try { Document doc = saxReader.read(xmlName); // 这个xpath的意思是,获取text='系统管理'的一个Item下的所有Item的节点 String xpath = "//item[@text='" + name + "']/child::*"; List list = doc.selectNodes(xpath); Iterator it = list.iterator(); while (it.hasNext()) { Element elt = (Element) it.next(); Attribute attr = elt.attribute("grade"); System.out.println(attr.getValue()); attr = elt.attribute("text"); System.out.println(attr.getValue()); attrs.add(attr.getValue()); } } catch (Exception e) { e.printStackTrace(); } return attrs; }
注意看其中的xpath的写法,正是因为有了xpath,我们才能如此简单灵活的对xml进行操作.
刚刚使用xpath的时候可能会报一个错误:Exception in thread "main" java.lang.NoClassDefFoundError: org/jaxen/JaxenException
这时我们应该往CLASSPATH导入一个jar包,叫jaxen-1.1.1.jar,可从网上下载.
以下附上xpath的部分语法,具体可查看我的BOLG的链接,有一个叫xpath的.呵呵!
<?xml version="1.0" encoding="ISO-8859-1"?>
<bookstore>
<book>
<title lang="eng">Harry Potter</title>
<price>29.99</price>
</book>
<book>
<title lang="eng">Learning XML</title>
<price>39.95</price>
</book>
</bookstore>
表达式 描述
节点名 选择所有该名称的节点集
/ 选择根节点
// 选择当前节点下的所有节点
. 选择当前节点
.. 选择父节点
@ 选择属性
示例
表达式 描述
bookstore 选择所有bookstore子节点
/bookstore 选择根节点bookstore
bookstore/book 在bookstore的子节点中选择所有名为book的节点
//book 选择xml文档中所有名为book的节点
bookstore//book 选择节点bookstore下的所有名为book为节点
//@lang 选择所有名为lang的属性
断言
在方括号中[],用来更进一步定位选择的元素
表达式 描述
/bookstore/book[1] 选择根元素bookstore的book子元素中的第一个
注意: IE5以上浏览器中第一个元素是0
/bookstore/book[last()] 选择根元素bookstore的book子元素中的最后一个
/bookstore/book[last()-1] 选择根元素bookstore的book子元素中的最后第二个
/bookstore/book[position()<3] 选择根元素bookstore的book子元素中的前两个
//title[@lang] 选择所有拥有属性lang的titile元素
//title[@lang='eng'] 选择所有属性值lang为eng的title元素
/bookstore/book[price>35.00] 选择根元素bookstore的book子元素中那些拥有price子元素且值大于35的
/bookstore/book[price>35.00]/title 选择根元素bookstore的book子元素中那些拥有price子元素且值大于35的title子元素
选择位置的节点
通配符 描述
* 匹配所有元素
@* 匹配所有属性节点
node() 匹配任何类型的节点
示例
表达式 描述
/bookstore/* 选择根元素bookstore的下的所有子元素
//* 选择文档中所有元素
//title[@*] 选择所有拥有属性的title元素
使用操作符“|”组合选择符合多个path的表达式
相关文章推荐
- DOM4J中XPath的基础概念和使用
- Dom4j使用Xpath语法读取xml节点
- java使用dom4j和XPath解析XML与.net 操作XML小结
- Dom4j使用Xpath语法读取xml节点
- 【JAVA使用XPath、DOM4J解析XML文件,实现对XML文件的CRUD操作】
- 使用dom4j的xPath解析XML
- 在dom4j中使用XPath的简单实例
- Dom4j使用Xpath语法读取xml节点
- java中使用Dom4j的xPath解析xml文件
- dom4j 使用xpath 解析 persistence.xml 出现xmlns后不能解析问题解决
- 使用dom4j和XPath解析XML之例子一
- 使用dom4j的xPath解析XML
- 在Dom4j中使用Xpath搜索xml的元素节点
- Dom4j中XPath相对路径的使用
- WebService技术总结(三):项目实战——使用XML,dom4j,Xpath实现远程调用
- 在Dom4j中使用xpath--查看xml数据代码
- dom4j中xpath的使用
- javaweb学习第七天:使用dom4j支持xpath的操作来解析xml
- 【XML解析】(5)DOM4J中的XPath的使用方式及其【完整语法详细说明】
- javaweb学习总结十三(dom4j方式对XML文档进行解析以及Xpath的使用)