目录java
XML是一种通用的数据交换格式,它的平台无关性、语言无关性、系统无关性、给数据集成与交互带来了极大的方便。本篇文章重点介绍DOM4J对XML文件的一些操做。spring
常看法析方式和解析器dom
包名 | 做用 |
---|---|
import org.dom4j.Document; | Document文档类 |
import org.dom4j.Element | 元素节点类 |
import org.dom4j.QName; | 一个对元素名字的封装类 |
import org.dom4j.io.SAXReader; | sax读取类 |
import org.dom4j.io.XMLWriter | xml写入类 |
import org.dom4j.io.OutputFormat | 输出格式 |
元素 | 含义 |
---|---|
Attribute | 定义了 XML 的属性。 |
Branch | 指可以包含子节点的节点。如XML元素(Element)和文档(Docuemnts)定义了一个公共的行为 |
CDATA | 定义了 XML CDATA 区域 |
CharacterData | 是一个标识接口,标识基于字符的节点。如CDATA,Comment, Text. |
Comment | 定义了 XML 注释的行为 |
Document | 定义了XML 文档 |
DocumentType | 定义 XML DOCTYPE 声明 |
Element | 定义XML 元素 |
ElementHandler | 定义了Element 对象的处理器 |
ElementPath | 被 ElementHandler 使用,用于取得当前正在处理的路径层次信息 |
Entity | 定义 XML entity |
Node | 为dom4j中全部的XML节点定义了多态行为 |
NodeFilter | 定义了在dom4j 节点中产生的一个滤镜或谓词的行为(predicate) |
ProcessingInstruction | 定义 XML 处理指令 |
Text | 定义 XML 文本节点 |
Visitor | 用于实现 Visitor模式 |
XPath | 在分析一个字符串后会提供一个 XPath 表达式 |
方法 | 含义 |
---|---|
getQName() | 元素的QName对象 |
getNamespace() | 元素所属的Namespace对象 |
getNamespacePrefix() | 元素所属的Namespace对象的prefix |
getNamespaceURI() | 元素所属的Namespace对象的URI |
getName() | 元素的local name |
getQualifiedName() | 元素的qualified name |
getText() | 元素所含有的text内容,若是内容为空则返回一个空字符串而不是null |
getTextTrim() | 元素所含有的text内容,其中连续的空格被转化为单个空格,该方法不会返回null |
attributeIterator() | 元素属性的iterator,其中每一个元素都是 |
方法 | 含义 |
---|---|
attributeValue() | 元素的某个指定属性所含的值 |
elementIterator() | 元素的子元素的iterator,其中每一个元素都是Element对象 |
element() | 元素的某个指定(qualified name或者local name)的子元素 |
elementText() | 元素的某个指定(qualified name或者local name)的子元素中的text信息 |
getParent() | 元素的父元素 |
getPath() | 元素的XPath表达式,其中父元素的qualified name和子元素的qualified name之间使用”/”分隔 |
isTextOnly() | 是否该元素只含有text或是空元素 |
isRootElement() | 是否该元素是XML树的根节点 |
SAXReader reader = new SAXReader(); Document document = reader.read(new File("***.xml"));
String text = "<members></members>"; Document document = DocumentHelper.parseText(text);
Element root = dom.getRootElement();
Element memberElm=root.element("title");
String text=memberElm.getText();
List list = rootElm.elements("member"); Iterator<Element> it = list.iterator(); while(it.hasNext()){ Element elm = it.next(); // do something... }
Element ageElm = newMemberElm.addElement("age");
ageElm.setText("29");
parentElm.remove(childElm);
Element root=document.getRootElement(); Attribute attribute=root.attribute("id");
newMemberElm.addAttribute("name", "sitinspring");
Attribute attribute=root.attribute("name"); attribute.setText("sitinspring");
Attribute attribute=root.attribute("size");// 属性名name root.remove(attribute);
test.xml函数
<?xml version="1.0" encoding="UTF-8"?> <bookstore> <book id="1"> <title>巴黎圣母院</title> <author>雨果</author> </book> <book id="2"> <title>飘</title> <author>米切尔</author> </book> </bookstore>
1. 使用List列表解析xml编码
import java.io.File; import java.util.List; import org.dom4j.Attribute; import org.dom4j.Document; import org.dom4j.Element; import org.dom4j.io.SAXReader; public class XmlDemo { public static void main(String[] args) throws Exception { SAXReader reader = new SAXReader(); File file = new File("test.xml"); Document document = reader.read(file); Element root = document.getRootElement(); List<Element> childElements = root.elements(); for (Element child : childElements) { //已知属性名状况下 System.out.println("--->id: " + child.attributeValue("id")); System.out.println("title:" + child.elementText("title")); System.out.println("author:" + child.elementText("author")); //未知属性名状况下 /*List<Attribute> attributeList = child.attributes(); for (Attribute attr : attributeList) { System.out.println(attr.getName() + ": " + attr.getValue()); } List<Element> elementList = child.elements(); for (Element ele : elementList) { System.out.println(ele.getName() + ": " + ele.getText()); } System.out.println();*/ } } } //输出结果: --->id: 1 title:巴黎圣母院 author:雨果 --->id: 2 title:飘 author:米切尔
2. 使用Iterator解析xmlspa
public class XmlDemo { public static void main(String[] args) throws Exception { SAXReader reader = new SAXReader(); Document document = reader.read(new File("test.xml")); Element root = document.getRootElement(); Iterator<Element> it = root.elementIterator(); while (it.hasNext()) { Element element = it.next(); //未知属性名称状况下 Iterator<Element> attrIt = element.attributeIterator(); while (attrIt.hasNext()) { Attribute a = (Attribute) attrIt.next(); System.out.println(a.getValue()); } Iterator<Element> eleIt = element.elementIterator(); while (eleIt.hasNext()) { Element e = eleIt.next(); System.out.println(e.getName() + ": " + e.getText()); } System.out.println(); //已知元素名状况下 /*System.out.println("id: " + element.attributeValue("id")); System.out.println("title: " + element.elementText("title")); System.out.println("author: " + element.elementText("author")); System.out.println();*/ } } } //输出结果: id: 1 title:巴黎圣母院 author:雨果 id: 2 title:飘 author:米切尔
public class XmlDemo { public static void main(String[] args) throws Exception { Document doc = DocumentHelper.createDocument(); //增长根节点 Element books = doc.addElement("bookstore"); //增长子元素 Element book1 = books.addElement("book"); Element title1 = book1.addElement("title"); Element author1 = book1.addElement("author"); Element book2 = books.addElement("book"); Element title2 = book2.addElement("title"); Element author2 = book2.addElement("author"); //为子节点添加属性 book1.addAttribute("id", "3"); //为元素添加内容 title1.setText("战争与和平"); author1.setText("列夫托尔斯泰"); book2.addAttribute("id", "4"); title2.setText("红楼梦"); author2.setText("曹雪芹"); //实例化输出格式对象 OutputFormat format = OutputFormat.createPrettyPrint(); //设置输出编码 format.setEncoding("UTF-8"); //建立须要写入的File对象 File file = new File("test2.xml"); //生成XMLWriter对象,构造函数中的参数为须要输出的文件流和格式 XMLWriter writer = new XMLWriter(new FileOutputStream(file), format); //开始写入,write方法中包含上面建立的Document对象 writer.write(doc); } }
运行结果(项目根目录下):code
<?xml version="1.0" encoding="UTF-8"?> <bookstore> <book id="3"> <title>战争与和平</title> <author>列夫托尔斯泰</author> </book> <book id="4"> <title>红楼梦</title> <author>曹雪芹</author> </book> </bookstore>
public class XmlDeml { public static void main(String[] args) throws Exception { SAXReader reader = new SAXReader(); File file = new File("test.xml"); Document document = reader.read(file); Element root = document.getRootElement(); Element nameElement = root.element("book").element("author"); nameElement.setText("鲁迅"); //写回XML文档 OutputFormat format = OutputFormat.createPrettyPrint(); XMLWriter writer = new XMLWriter(new FileOutputStream("test.xml"), format); writer.write(document); writer.close(); } }
运行结果(项目根目录下):orm
<?xml version="1.0" encoding="UTF-8"?> <bookstore> <book id="1"> <title>巴黎圣母院</title> <author>鲁迅</author> </book> </bookstore>