一、DOM解析XML

来源:互联网 发布:北京软件退税计算方法 编辑:程序博客网 时间:2024/06/05 01:58

为 XML 文档的已解析版本定义了一组接口。解析器读入整个文档,然后构建一个驻留内存的树结构,然后代码就可以使用 DOM接口来操作这个树结构。

优点:整个文档树在内存中,便于操作;支持删除、修改、重新排列等多种功能;

缺点:将整个文档调入内存(包括无用的节点),浪费时间和空间;

使用场合:一旦解析了文档还需多次访问这些数据;硬件资源充足(内存、CPU)。 


packageFourWayToAnalyticXml;

 

importjava.io.FileNotFoundException;

importjava.io.FileOutputStream;

importjava.io.IOException;

importjava.io.PrintWriter;

importjavax.xml.parsers.DocumentBuilder;

importjavax.xml.parsers.DocumentBuilderFactory;

importjavax.xml.parsers.ParserConfigurationException;

importjavax.xml.transform.OutputKeys;

importjavax.xml.transform.Transformer;

importjavax.xml.transform.TransformerConfigurationException;

importjavax.xml.transform.TransformerException;

importjavax.xml.transform.TransformerFactory;

importjavax.xml.transform.dom.DOMSource;

importjavax.xml.transform.stream.StreamResult;

 

importorg.w3c.dom.Document;

importorg.w3c.dom.Element;

importorg.w3c.dom.Node;

importorg.w3c.dom.NodeList;

importorg.xml.sax.SAXException;

 

importInterface.XmlDocument;

 

 * @author  DOM生成与解析XML文档


publicclass DOMToAnalyticXml implements XmlDocument {

private Document document;

private String fileName;

 

public void init() {

try {

DocumentBuilderFactory factory = DocumentBuilderFactory

.newInstance();

DocumentBuilder builder = factory.newDocumentBuilder();

this.document = builder.newDocument();

} catch (ParserConfigurationException e) {

System.out.println(e.getMessage());

}

}

 

public void createXml(String fileName) {

Element root = this.document_createElement_x_x_x("employees");

this.document.a(root);

Element employee = this.document_createElement_x_x_x("employee");

Element name = this.document_createElement_x_x_x("name");

name.a(this.document_createTextNode("qqqqq"));

employee.a(name);

Element sex = this.document_createElement_x_x_x("sex");

sex.a(this.document_createTextNode("m"));

employee.a(sex);

Element age = this.document_createElement_x_x_x("age");

age.a(this.document_createTextNode("30"));

employee.a(age);

root.a(employee);

TransformerFactory tf = TransformerFactory.newInstance();

try {

Transformer transformer = tf.newTransformer();

DOMSource source = new DOMSource(document);

transformer.setOutputProperty(OutputKeys.ENCODING, "gb2312");

transformer.setOutputProperty(OutputKeys.INDENT, "yes");

PrintWriter pw = new PrintWriter(newFileOutputStream(fileName));

StreamResult result = new StreamResult(pw);

transformer.transform(source, result);

System.out.println("生成XML文件成功!");

} catch (TransformerConfigurationException e) {

System.out.println(e.getMessage());

} catch (IllegalArgumentException e) {

System.out.println(e.getMessage());

} catch (FileNotFoundException e) {

System.out.println(e.getMessage());

} catch (TransformerException e) {

System.out.println(e.getMessage());

}

}

 

public void parserXml(String fileName) {

try {

DocumentBuilderFactory dbf =DocumentBuilderFactory.newInstance();

DocumentBuilder db = dbf.newDocumentBuilder();

Document document = db.parse(fileName);

NodeList employees = document.getChildNodes();

for (int i = 0; i < employees.getLength(); i++){

Node employee = employees.item(i);

NodeList employeeInfo = employee.getChildNodes();

for (int j = 0; j < employeeInfo.getLength(); j++){

Node node = employeeInfo.item(j);

NodeList employeeMeta = node.getChildNodes();

for (int k = 0; k < employeeMeta.getLength(); k++){

System.out.println(employeeMeta.item(k).getNodeName()

+ ":" + employeeMeta.item(k).getTextContent());

}

}

}

System.out.println("解析完毕");

} catch (FileNotFoundException e) {

System.out.println(e.getMessage());

} catch (ParserConfigurationException e) {

System.out.println(e.getMessage());

} catch (SAXException e) {

System.out.println(e.getMessage());

} catch (IOException e) {

System.out.println(e.getMessage());

}

}

public static void main(String[] args) {

// TODO Auto-generated method stub

DOMToAnalyticXml dom  = newDOMToAnalyticXml();

dom.init();

dom.createXml("domparserXml");

dom.parserXml("domparserXml");

}

}

0 0