解析XML
DOM :(Java提供) (整个文件加载到内存中去执行解析)以指定编码解析
SAX :(Javat提供) 创建一个Handler类逐个节点的访问解析;个人理解因为不是一次性加载到内存,这个不提供修改保存;是事件形驱动;可以指定编码解析
JDOM :通过Stream 流的形式一次性解析加载到内存。和DOM解析类似,即使不知道第一级节点的标签名也能遍历解析; 还可以指定编码解析;
DOM4J :通过Stream 流的形式一次性解析加载到内存。和DOM解析类似,即使不知道第一级节点的标签名也能遍历解析; 还可以指定编码解析;是JDOM的一个分支;
DOM4J解析
DOM4J不是Java 官方提供,需要自己导入依赖;
准备工作
SAXReader saxReader = new SAXReader();
org.dom4j.Document document = saxReader.read(new File("books.xml"));
org.dom4j.Element rootElement = document.getRootElement();
public static void dom4jParser() throws DocumentException {
SAXReader saxReader = new SAXReader();
org.dom4j.Document document = saxReader.read(new File("books.xml"));
org.dom4j.Element rootElement = document.getRootElement();
Iterator<org.dom4j.Element> iterator = rootElement.elementIterator();
while (iterator.hasNext()) {
org.dom4j.Element element = iterator.next();
// 获取属性 element.attributeIterator(); element.attribute(int / String)
List<org.dom4j.Attribute> attributes = element.attributes();
for (org.dom4j.Attribute attr : attributes) {
System.out.println(attr.getName() + " " + attr.getValue());
}
System.out.println(element.getName());
}
//选择过滤,只保留book标签
Iterator<org.dom4j.Element> iterator1 = rootElement.elementIterator("book");
while (iterator1.hasNext()) {
org.dom4j.Element element = iterator1.next();
System.out.println(element.getName());
Iterator childIterator = element.elementIterator();
while (childIterator.hasNext()) {
// 获取子元素 其实也是element
org.dom4j.Element next = (org.dom4j.Element) childIterator.next();
System.out.println(next.getName() + " " + next.getStringValue());
}
}
}
网友评论