版权声明:本文为博主原创文章,未经博主允许不得转载。 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();
}
}
}