xml之dom解析

来源:互联网 发布:好用的网络同传软件 编辑:程序博客网 时间:2024/05/16 09:29
package xml;

import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.PrintWriter;

import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.parsers.ParserConfigurationException;
import javax.xml.transform.OutputKeys;
import javax.xml.transform.Transformer;
import javax.xml.transform.TransformerConfigurationException;
import javax.xml.transform.TransformerException;
import javax.xml.transform.TransformerFactory;
import javax.xml.transform.dom.DOMSource;
import javax.xml.transform.stream.StreamResult;


import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.w3c.dom.Node;
import org.w3c.dom.NodeList;
import org.xml.sax.SAXException;


public class XmlImpl implements XmlInterface
{
private Document document;
public void init(){
try
{
DocumentBuilderFactory factory= DocumentBuilderFactory.newInstance();
DocumentBuilder builder;
builder = factory.newDocumentBuilder();
this.document=builder.newDocument();
} catch (ParserConfigurationException e)
{
// TODO Auto-generated catch block
e.printStackTrace();
}
}
@Override
public void createXml(String fileName)
{
// TODO Auto-generated method stub
Element root=this.document.createElement("scores");  //根节点
this.document.appendChild( root);

        Element employee = this.document.createElement("employee"); //跟节点子节点

        Attr email=this.document.createAttribute("email");  //添加节点属性
        email.setNodeValue("jiaww@qq.com");
        employee.setAttributeNode(email);

        Element name = this.document.createElement("name"); 

        name.appendChild(this.document.createTextNode("wangchenyang")); //节点追加数据
        employee.appendChild(name); 
        Element sex = this.document.createElement("sex"); 
        sex.appendChild(this.document.createTextNode("m")); 
        employee.appendChild(sex); 
        Element age = this.document.createElement("age"); 
        age.appendChild(this.document.createTextNode("26")); 
        employee.appendChild(age); 
        root.appendChild(employee);
        
        TransformerFactory tf=TransformerFactory.newInstance();
        try
{
Transformer transformer=tf.newTransformer();
DOMSource s=new DOMSource(document);
transformer.setOutputProperty(OutputKeys.ENCODING, "UTF-8");
transformer.setOutputProperty(OutputKeys.INDENT, "yes");
PrintWriter pw = new PrintWriter(new FileOutputStream(fileName));
StreamResult re=new StreamResult(pw);
transformer.transform(s, re);//s是源dom,re是目的源
System.out.println("done");
} catch (TransformerConfigurationException e)
{
// TODO Auto-generated catch block
e.printStackTrace();
} catch (FileNotFoundException e)
{
// TODO Auto-generated catch block
e.printStackTrace();
} catch (TransformerException e)
{
// TODO Auto-generated catch block
e.printStackTrace();
}
}

@Override
public void parserXml(String fileName)
{
// TODO Auto-generated method stub
        DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
        try
{
DocumentBuilder db = dbf.newDocumentBuilder();

Document document = db.parse(fileName);

                 //获得根元素

Element r=document.getDocumentElement();
System.out.println(r.getNodeName());
   //获得根元素名字
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("ok");
} catch (ParserConfigurationException e)
{
// TODO Auto-generated catch block
e.printStackTrace();
} catch (SAXException e)
{
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e)
{
// TODO Auto-generated catch block
e.printStackTrace();
}

}

}


package xml;
public class Main
{
public static void main(String[] args)
{
// TODO Auto-generated method stub
XmlImpl dd=new XmlImpl();
String str="e:/grade.xml";
dd.init();
dd.createXml(str);//输出结果1
            dd.parserXml(str);//输出结果2
}
}

输出结果1

<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<scores>
<employee email="jiaww@qq.com">
<name>wangchenyang</name>
<sex>m</sex>
<age>26</age>
</employee>
</scores>


输出结果2

#text:


name:wangchenyang
#text:


sex:m
#text:


age:26
#text:

0 0
原创粉丝点击