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