XML文件的解析和生成(DOM)

来源:互联网 发布:php配置环境工具 编辑:程序博客网 时间:2024/05/23 01:15

    在W3C中定义了SAX和DOM两种解析XML文件的方式,其中DOM是将XML文件转换成一个对象模型的集合,即DOM树,通过DOM接口,应用程序能够在任何时候访问XML文件中的任何一部分数据,这种方式也被称做随机访问机制。


/*——————————解析XML文件——————————*/

XML文件web.xml:

<?xml version="1.0" encoding="GBK"?><text><man><name>张三</name><email>zhangsan@163.com</email></man><man><name>李四</name><email>lisi@163.com</email></man></text>
形成的DOM树:


解析的java代码:

import java.io.*;import org.xml.sax.*;import org.w3c.dom.*;import javax.xml.parsers.*;
</pre><pre name="code" class="java">public class ReadXml {public static void main(String[] args) throws IOException {//建立DocumentBuilderFactory工厂类DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();//取得DocumentBuilderDocumentBuilder builder = null;try {builder = factory.newDocumentBuilder();} catch (ParserConfigurationException e) {e.printStackTrace();}//创建一个根节点Document document = null;try {document = builder.parse("D:" + File.separator + "web.xml");}catch (SAXException e) {e.printStackTrace();}//查找lingkman的节点NodeList nodeList = document.getElementsByTagName("man");for(int i = 0; i < nodeList.getLength(); i++){Element e = (Element)nodeList.item(i);//取出每一个元素System.out.println(e.getElementsByTagName("name").item(0).getFirstChild().getNodeValue());}}}

/*——————————生成XML文件——————————*/

生成的java代码:

import java.io.*;import org.w3c.dom.*;import javax.xml.parsers.*;import javax.xml.transform.*;import javax.xml.transform.dom.*;import javax.xml.transform.stream.*;
</pre><pre name="code" class="java">public class WriteXml {public static void main(String[] args) {//建立DocumentBuilderFactory工厂类DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();//取得DocumentBuilderDocumentBuilder builder = null;try {builder = factory.newDocumentBuilder();} catch (ParserConfigurationException e) {e.printStackTrace();}//创建一个根节点Document doc = null;//创建一个DOM树doc = builder.newDocument();//创建各个节点Element manList = doc.createElement("manList");Element man = doc.createElement("man");Element address = doc.createElement("address");Element text = doc.createElement("text");//设置节点的文本内容man.appendChild(doc.createTextNode("张三"));address.appendChild(doc.createTextNode("中国"));//设置节点之间的关系manList.appendChild(man);manList.appendChild(address);text.appendChild(manList);doc.appendChild(text);/*--------------------------输出文档到文件中-------------------------------*///工厂类TransformerFactory tf = TransformerFactory.newInstance();//此抽象类的实例能够将源树转换为结果树Transformer t = null;try{t = tf.newTransformer();} catch (TransformerConfigurationException e) {e.printStackTrace();}//设置编码t.setOutputProperty(OutputKeys.ENCODING, "utf-8");//输出文档DOMSource source = new DOMSource(doc);//指定输出位置StreamResult result = new StreamResult(new File("D:" + File.separator + "output.xml"));try {//输出t.transform(source, result);}catch (TransformerException e) {e.printStackTrace();}}}
所生成的XML文件output.xml:

<?xml version="1.0" encoding="utf-8" standalone="no"?><text><manList><man>张三</man><address>中国</address></manList></text>

生成的XML文件不是整齐的,那是因为,输出的时候不会考虑格式的换行。


——参考资料:《JavaWeb开发实战经典》

0 0
原创粉丝点击