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());
}
}
}
输出结果是: