利用Node读取和修改数据

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/huiting_liu/article/details/68491141

      Node是所有类型节点的父节点,Node提供了读取数据的方法,可以通过Node对象的各个API获得相应的信息。

所需的xml文件:books.xml

<?xml version="1.0" encoding="UTF-8"?>
<bookstore>
	<book1 id="1">
		<name>冰与雪之歌</name>
		<author>乔治马丁</author>
		<year>2014</year>
		<price>89</price>
	</book1>
	<book2 id="2">
		<name>童话大王</name>
		<author>郑渊洁</author>
		<year>2005</year>
		<price>70</price>
		<language>English</language>
	</book2>
</bookstore>

一、读取数据

import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import org.w3c.dom.Document;
import org.w3c.dom.Node;
import org.w3c.dom.NodeList;

public class Test02 {

	public static void main(String[] args) throws Exception {
			//   一、创建一个DocumentBuliderFactory的对象
			DocumentBuilderFactory dbf=	DocumentBuilderFactory.newInstance();
			//   二、创建一个DocumentBuilder对象
			DocumentBuilder db=	dbf.newDocumentBuilder();
			//通过DocumentBuilder的Parse()方法加载books.xml到当前项目下
			Document document=	db.parse("books.xml");
			//获取根节点
			Node root =document.getFirstChild();
			System.out.println("根节点名称为:"+root.getNodeName());
			System.out.println("根节点类型为:"+root.getNodeType());
			//显示所有子节点
			NodeList list = root.getChildNodes();
			for(int i=0;i<list.getLength();i++)
			{
				Node node =list.item(i);//获取某个位置的Node,位置从0开始算起
				if(!(node.getNodeType()==Node.TEXT_NODE && node.getTextContent().trim().length()==0))
					//如果节点是文本类型并且内容为空白,则不显示
				{
				System.out.println(node.getNodeName());
				}
			}
	}

}


二、修改数据

import java.io.File;
import java.util.ArrayList;

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.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.Node;
import org.w3c.dom.NodeList;

public class Test03 {

	public static void main(String[] args) throws Exception 
	{
		//创建一个DocumentBuliderFactory的对象
		DocumentBuilderFactory dbf= DocumentBuilderFactory.newInstance();
	   //创建一个DocumentBuilder对象
		DocumentBuilder db= dbf.newDocumentBuilder();
		//通过DocumentBuilder的Parse()方法加载books.xml到当前项目下
		Document doc = db.parse("books.xml");
		//获得所有price 节点
		NodeList list = doc.getElementsByTagName("price");
		ArrayList arrayList = new ArrayList();
		Node books=null;
		for(int i=0;i<list.getLength();i++)
		{
			
			Node priceNode = list.item(i);
			String strPrice = priceNode.getTextContent();
			double price=Double.parseDouble(strPrice);
			//获取该价格的父节点(book)
			Node book= priceNode.getParentNode();
			//获取book的父节点books
			books=book.getParentNode();
			if(price >80)
			{
				arrayList.add(book);
			}
			else
			{
				books.removeChild(book);
			}
			
		}
		//创建TransformerFactory对象
		TransformerFactory tff=TransformerFactory.newInstance();
		try {
			//创建Transformer对象
				Transformer tf= tff.newTransformer();
				tf.setOutputProperty(OutputKeys.INDENT, "yes");//使属性换行
				tf.transform(new DOMSource(doc),new StreamResult(new File("newbooks.xml")));
			} 
		catch (TransformerException e) 
		{
				// TODO Auto-generated catch block
				e.printStackTrace();
		}

	}

}




猜你喜欢

转载自blog.csdn.net/huiting_liu/article/details/68491141