您的位置:首页 > 编程语言 > Java开发

java DOM解析XML文件

2014-11-27 14:57 369 查看
转自: http://www.cnblogs.com/wpcnblog/archive/2011/07/09/2101651.html http://blog.csdn.net/redarmy_chen/article/details/12912065
</pre>1.打印xml文件内容<pre name="code" class="java">package com.test;

import java.io.File;

import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;

import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.w3c.dom.NodeList;

import javax.xml.parsers.*;
import javax.xml.transform.*;
import javax.xml.transform.dom.DOMSource;
import javax.xml.transform.stream.StreamResult;

import org.w3c.dom.*;
public class xmldisplay {
public static void main(String args[]) {
try {
//建一个个解析器工厂,来获得一个具体的解析器对象
DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
/*当获得一个工厂对象后,使用它的静态方法newDocumentBuilder()方法可以获得一个DocumentBuilder对象,这个对象代表了具体的DOM解析器
可以对XML文件进行解析
*/
DocumentBuilder builder = factory.newDocumentBuilder();
//返回一个Document对象
Document doc = builder.parse("d://links.xml");
//对Document对象调用normalize(),可以去掉XML文档中作为格式化内容的空白而映射在DOM树中 的不必要的Text Node对象
doc.normalize();
/*我们可以得到一个NodeList对象,一个Node对象代表了一个XML文档中的一个标签元素,而NodeList对象,观其名而知其意,所代表的 是一个Node对象的列表
XML文件所对应link标签的内容
*/
NodeList links = doc.getElementsByTagName("link");
for (int i = 0; i < links.getLength(); i++) {
//item()可以获取每一个node对象
Element link = (Element) links.item(i);
System.out.println("Content:");
System.out.println(link.getElementsByTagName("text").item(0).getFirstChild().getNodeValue());
System.out.print("URL: ");
System.out.println(link.getElementsByTagName("url").item(0).getFirstChild().getNodeValue());
System.out.print("Author: ");
System.out.println(link.getElementsByTagName("author").item(0).getFirstChild().getNodeValue());
System.out.print("Date: ");
Element linkdate = (Element) link.getElementsByTagName("date").item(0);
String day = linkdate.getElementsByTagName("day").item(0).getFirstChild().getNodeValue();
String month = linkdate.getElementsByTagName("month").item(0).getFirstChild().getNodeValue();
String year = linkdate.getElementsByTagName("year").item(0).getFirstChild().getNodeValue();
System.out.println(day + "-" + month + "-" + year);
System.out.print("Description: ");
System.out.println(link.getElementsByTagName("description").item(0).getFirstChild().getNodeValue());
System.out.println();
}

} catch (Exception e) {
e.printStackTrace();
}
}

}


2.往xml文件中写入

package com.test;

import java.io.File;

import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.transform.Transformer;
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.NodeList;
import org.w3c.dom.Text;

public class xmlldisplay1 {
public static void main(String args[]) throws Exception {

//建一个个解析器工厂,来获得一个具体的解析器对象
DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
/*当获得一个工厂对象后,使用它的静态方法newDocumentBuilder()方法可以获得一个DocumentBuilder对象,这个对象代表了具体的DOM解析器
可以对XML文件进行解析
*/
DocumentBuilder builder = factory.newDocumentBuilder();
//返回一个Document对象
Document doc = builder.parse("d://links.xml");
//对Document对象调用normalize(),可以去掉XML文档中作为格式化内容的空白而映射在DOM树中 的不必要的Text Node对象
doc.normalize();
/*我们可以得到一个NodeList对象,一个Node对象代表了一个XML文档中的一个标签元素,而NodeList对象,观其名而知其意,所代表的 是一个Node对象的列表
XML文件所对应link标签的内容
*/
NodeList links = doc.getElementsByTagName("link");
String text="Homepage";
String url="www.hzliu.com";
String author="Hzliu";
String discription="!!!";
Text textseg;
Element link=doc.createElement("links");
Element linktext=doc.createElement("text");
textseg=doc.createTextNode(text);
linktext.appendChild(textseg);
link.appendChild(linktext);
// doc.getDocumentElement().appendChild(link);
Element linkurl=doc.createElement("url");
textseg=doc.createTextNode(url);
linktext.appendChild(textseg);
link.appendChild(linkurl);
doc.getDocumentElement().appendChild(link);
TransformerFactory tFactory =TransformerFactory.newInstance();
Transformer transformer = tFactory.newTransformer();
DOMSource source = new DOMSource(doc);
StreamResult result = new StreamResult(new java.io.File("d://links.xml"));
transformer.transform(source, result);
}

////我们希望在上面的XML文件中加入一个新的link节点,因而首先还是要读入links.xml文件,构建一个DOM树,然后再对这个DOM树进行修改(添加节点),最后把修改后的DOM写回到links.xml文件中:

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: