java DOM解析XML文件

转自:  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文件中:
		
	
}


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值