以前只是写xml,一直都没有解析xml,因为最近需要,所以找了许多资料学习了dom4j解析xml,网上写的很好的一个教程,一起学习
http://blog.csdn.net/redarmy_chen/article/details/12969219
使用dom4j解析xml
1.获取Document对象的三种方式:
a.通过SAXReader对象获取Document
SAXReader reader = new SAXReader();
Document doc = reader.read(new File(test.xml)); //这里也可以传入一个输入流对象。
b.解析XML形式的文本,得到document对象.
Document doc = DocumentHelper.parseText(strXML);
c.主动创建document对象.
Document doc= DocumentHelper.createDocument();
2.xml和字符串相互转换
a.将xml转换成字符串
Document Element 有asXML();将包含的xml数据转换成字符串格式。
b.也可以通过Document解析,将字符串转换成xml数据
Document doc= DocumentHelper.parseText(String strXML);
3.将Document对象输出为xml文件
a.无格式的
XMLWriter writer = new XMLWriter(out); 接收输出流对象[outputFormat对象]
writer.write(Document);传入一个Document对象,他会将document中的xml数据都写入到指定的位置。
writer.flush();
writer.close();
b.有格式的。
// 紧凑的格式
// OutputFormat format = OutputFormat.createCompactFormat();
// 排版缩进的格式
OutputFormat format = OutputFormat.createPrettyPrint();
//如果xml中有中文数据,还需要设置编码
format.setEncoding("UTF-8");
XMLWriter writer = new XMLWriter(out,format);
writer.write(Document);
writer.flush();
writer.close();
//通过元素对象进行操作
/*Element addAttribute(String name, String value); 为该节点增加属性
* void add(Attribute attribute); 为该节点增加属性
* void appendAttributes(Element element); ?
* addText(String text); 为该节点增加文本
* add(Text text); 为该节点增加文本
* boolean remove(Attribute attribute); 为该节点删除某个属性。
* remove(Text text); 为该节点删除某个文本
* String getText(); 获取该节点的文本。
* String getTextTrim(); 获取该节点的文本。取出多余的空格
* String getStringValue(); ?
* List attributes(); 返回该节点所有属性的List集合,List的类型为 List<Attribute>
* void setAttributes(List attributes); 设置该节点的所有属性。 传入的list应该是List<Attribute>
* int attributeCount(); 返回属性的长度
* Iterator attributeIterator(); 返回该节点的所有属性的迭代器
*Attribute attribute(int index); 获取该节点指定顺序的属性
* Attribute attribute(String name); 通过name获取指定的属性
* String attributeValue(String name); 通过name获取指定的属性的值
* void setAttributeValue(String name, String value); 更改某个属性的值
* Element element(String name); 返回该节点下指定名称的子节点
* List elements(); 返回该节点的所有子节点
* List elements(String name);返回该节点所有指定名称的子节点
* Iterator elementIterator();返回该借点的子节点的迭代器
* Iterator elementIterator(String name);
* boolean isRootElement(); 判断该节点是不是根节点
* String elementText(String name); 通过节点名称获取其文本
* String elementTextTrim(String name);
* addElement(String nodeName) 增加一个子节点,名称为指定的名称