XML在不同的语言里解析方式都是一样的,只不过实现的语法不同而已。
基本的解析方式有两种,一种叫SAX,另一种叫DOM。
DOM是基于XML文档树结构的解析,SAX是基于事件流的解析。
DOM解析的有点在与不仅可以读取文件,本身也可以生成和修改XML文件。
今天来看一下DOM的解析操作:
比如有这样一个XML文件:
<?xml version="1.0" encoding="gb2312"?> <addresslist> <linkman> <name>小明</name> <email>sdfa@126.com</email> </linkman> <linkman> <name>王帅</name> <email>mlda@163.com</email> </linkman> </addresslist>
下面用DOM进行解析操作:
package org.lxh.xml.dom; import java.io.File; import java.io.IOException; import javax.xml.parsers.DocumentBuilder; import javax.xml.parsers.DocumentBuilderFactory; import javax.xml.parsers.ParserConfigurationException; import org.w3c.dom.Document; import org.w3c.dom.Element; import org.w3c.dom.NodeList; import org.xml.sax.SAXException; public class DOM { /** * @param args * @throws ParserConfigurationException * @throws IOException * @throws SAXException */ public static void main(String[] args) throws ParserConfigurationException,SAXException,IOException { //建立DocumentBuilderFactory,用于取得DocumentBuilder DocumentBuilderFactory factory=DocumentBuilderFactory.newInstance(); //通过DocumentBuilderFactory取得DocumentBuilder DocumentBuilder builder=null; builder=factory.newDocumentBuilder(); //定义Document的接口对象,通过对DocumentBuilder类进行DOM树的转换操作 Document doc=null; //读取指定路径的XML文件 doc=(Document) builder.parse("F:"+File.separator+"test.xml"); //查找linkman节点 NodeList nl=((org.w3c.dom.Document) doc).getElementsByTagName("linkman"); //读取第一个节点的内容 for(int x=0;x<nl.getLength();x++){ //循环输出每一个节点 Element m=(Element) nl.item(x); System.out.println("姓名:+"m.getElementsByTagName("name").item(0).getFirstChild().getNodeValue()); System.out.println("邮箱:+"m.getElementsByTagName("email").item(0).getFirstChild().getNodeValue()); } } }
输出结果是: