Xml解析常用的两种方式
Xml解析常用的两种方式dom、 DOM4J
下面我们先看一下这两种方式的优缺点:
1、DOM解析的特点是将整个xml文档以树形结构放入到内存中,是官方推荐标准,优点是在内存中可以增删改查,缺点是当文件过大是可能会内存溢出。
(详细说明如下)
DOM的优势主要表现在:
易用性强,使用DOM时,将把所有的XML文档信息都存于内存中,并且遍历简单,支持XPath,增强了易用性。
DOM的缺点主要表现在:
效率低,解析速度慢,内存占用量过高,对于大文件来说几乎不可能使用。另外效率低还表现在大量的消耗时间,
因为使用DOM进行解析时,将为文档的每个element、attribute、processing-instruction和comment都创建一个对象,
这样在DOM机制中所运用的大量对象的创建和销毁无疑会影响其效率。
DOM4J解析:
简单易用,采用Java集合框架,并完全支持DOM、SAX和JAXP。
优点:
1、大量使用了Java集合类,方便Java开发人员,同时提供一些提高性能的替代方法。
2、支持XPath。
3、有很好的性能。
缺点:
1、大量使用了接口,API较为复杂。
1.准备xml文件
下面内容如果是练习的话直接复制即可
当然如果想自己写也很ok
<?xml version="1.0" encoding="UTF-8"?>
<games>
<game id="1">
<name>厚黑学</name>
<company>计算机世界</company>
</game>
<game id="2">
<name>黑客帝国</name>
<company>Student</company>
</game>
<game id="3">
<name>javaWeb</name>
<company>秋天的美丽</company>
</game>
</games>
2.DOM解析
废话不多说直接上代码
import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.w3c.dom.NodeList;
import org.xml.sax.SAXException;
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.parsers.ParserConfigurationException;
import java.io.IOException;
public class ParseXml {
public static void main(String[] args) throws ParserConfigurationException, IOException, SAXException {
// 获取去dom解析器工厂
DocumentBuilderFactory documentBuilderFactory = DocumentBuilderFactory.newInstance();
// 获取dom解析的构建器
DocumentBuilder documentBuilder = documentBuilderFactory.newDocumentBuilder();
// 通过构建器对象调用parse()方法 ----》方法中传入需要解析文件的路径
Document parse = documentBuilder.parse("F:\\java\\javaweb\\parse_xml_project01\\src\\com\\bjpowernode\\parsexml\\games.xml");
// 获取根节点
Element documentElement = parse.getDocumentElement();
// 获取根节点的子节点(game)
NodeList games = documentElement.getElementsByTagName("game");
// 根据节点的索引找到需要的节点元素
Element game = (Element) games.item(2);
// 获取company节点
NodeList company = game.getElementsByTagName("company");
Element item = (Element) company.item(0);
// 输出"company"节点的文本内容
String textContent = item.getTextContent();
// 输出到控制台
System.out.println(textContent);
}
}
3. DOM4J解析
在使用 DOM4J解析之前需要先导入DOM4J的jar包
这是下载地址:https://dom4j.github.io/
需要的小伙伴自行下载即可
DOM4J解析代码如下
import org.dom4j.Document;
import org.dom4j.DocumentException;
import org.dom4j.Element;
import org.dom4j.io.SAXReader;
import java.io.File;
import java.util.Iterator;
public class Dom4jXml {
public static void main(String[] args) {
// 构建解析对象
SAXReader saxReader = new SAXReader();
try {
// 创建管道指向需要解析的xml文件
Document read = saxReader.read(new File("F:\\java\\javaweb\\parse_xml_project01\\src\\com\\bjpowernode\\parsexml\\games.xml"));
// 获取根节点标签
Element rootElement = read.getRootElement();
// 读取games
Iterator iterator = rootElement.elementIterator();
// 遍历
while (iterator.hasNext()){
// 获取到所有的子节点并转换
Element next = (Element) iterator.next();
// 迭代game
Iterator iterator1 = next.elementIterator();
while (iterator1.hasNext()){
Element next1 = (Element) iterator1.next();
// 通过getText()方法获取节点的文本内容
String text = next1.getText();
// 打印节点里面所有的文本内容(next1.getName() -- 》这个方法是获取节点名字的)
System.out.println(next1.getName() +"---->"+text);
}
}
} catch (DocumentException e) {
e.printStackTrace();
}
}
}