dom4j 总结 (一) xml文件的解析
引入dom4j 所需要的jar包
* dom4j-****.jar
* 如果要用到XPATH 还需要引入jaxen-****.jar
下面我们开始解析XML文件!
* xml文件内容如下:
* //打开数据输入流
File file = new File("D://单指标1.xml");
FileInputStream fis = new FileInputStream(file);
//读取输入流
SAXReader reader = new SAXReader();
Document document = reader.read(fis);
//将xml的全部内容输出!
logger.info(document.asXML());
* 这样我们得到了这个xml的document对象
* //得到元素
Element root = document.getRootElement()
//遍历输出根元素的子元素
for ( Iterator i = root.elementIterator(); i.hasNext(); ) {
Element element = (Element) i.next();
logger.info(element.getName());
}
//如上例我们将输出Threshold和warntemplate
* 得到元素的属性值
Element Threshold = root.element("Threshold");
for ( Iterator i = Threshold.attributeIterator(); i.hasNext(); ) {
Attribute attribute = (Attribute) i.next();
logger.info("attribute.getName()" + attribute.getName().trim());//打印出属性的名称
logger.info("attribute.getText()" + attribute.getText().trim());//打印出属性的值
}
* 通过XPATH检索xml
List rules = root.selectNodes("//rule");
for(int i=0;i<rules.size();i++){
Element rule = (Element)rules.get(i);
for(Iterator iter = rule.attributeIterator(); iter.hasNext();){
Attribute attribute = (Attribute) iter.next();
logger.info("attribute.getName()" + attribute.getName().trim());//得到属性名
logger.info("attribute.getText()" + attribute.getText().trim());//得到属性值
}
logger.info("---------------------------------");
}
* 将rule的所有属性打印出来!
* 如果想得到Node中的数据 如 <rule>123</rule>中的值。
可以将root.selectNodes("//rule");得到的List中的数据强制转成Node类型;
并调用Node的getName和getText方法得到
List rules = root.selectNodes("//rule");
for(int i=0;i<rules.size();i++){
Node rule = (Node)rules.get(i);
logger.info("rule.getName()" + rule.getName().trim());//得到节点名
logger.info("rule.getText()" + rule.getText().trim());//得到节点值
logger.info("---------------------------------");
}
* Element和Node的区别
元素(Element)和结点(Node)的区别,必须是含有完整信息的结点才是一个元素,例如<div>...</div>。但是一个结点不一定是一
个元素,而一个元素一定是一个结点。
Attr 接口表示 Element 对象中的属性。通常该属性所允许的值定义在与文档相关的模式中。
* XPATH的语法
请参见http://www.w3school.com.cn/xpath/xpath_syntax.asp