java dom读写xml_XML之DOM方式读写文件

DOM方式解析文件时,一次性加载文件,形成树结构,保留在内存中,方便修改。但当XML文件较大时,对内存的耗费比较大,容易影响性能并发生溢出。不管是解析文件还是生成文件,都要先创建Document对象。

public DocumentBuilder getDocumentBuilder() throws Exception{

//创建一个DocumentBuilderFactory的对象

DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();

//创建一个DocumentBuilder的对象

DocumentBuilder db = dbf.newDocumentBuilder();

return db;

}

1、DOM方式解析XML

getElementsByTagName("name"); 获取name节点集合,返回NodeList

getAttributes(); 获取节点的所有属性,返回NamedNodeMap

getNodeName(); 获取节点、属性名

getNodeValue(); 获取节点、属性值

getChildNodes(); 获取子节点集合,返回NodeList

getTextContent(); 获取节点的文本内容

getNodeType(); 获取节点类型

public void parseXML()throws Exception{

DocumentBuilder db = getDocumentBuilder();

//导入org.w3c.dom下的Document对象

Document document = db.parse("books.xml");

//获取book节点的集合

NodeList booklist = document.getElementsByTagName("book");

//获取book节点

for(int i=0;i

System.out.println("-----以下是第"+(i+1)+"本书的内容------");

Node book = booklist.item(i);

NamedNodeMap attrs = book.getAttributes(); //获取节点的所有属性

System.out.println("第"+(i+1)+"本书有"+attrs.getLength()+"个属性");

for(int j=0;j

Node attr = attrs.item(j); //获取第j个节点属性

System.out.print("属性名:"+attr.getNodeName());//获取属性名

System.out.println("-->属性值:"+attr.getNodeValue());//获取属性值

}

//当已知book节点只有一个id属性的时候,可将book节点强制类型转换成Element类型

//Element book1 = (Element)booklist.item(i);

//通过getAttribute方法获取属性值

//System.out.println(book1.getAttribute("id"));

NodeList childNodes = book.getChildNodes();//获取book的子节点

for(int k=0;k

//判断节点类型是元素节点,就输出节点名字和值

if(childNodes.item(k).getNodeType() == Node.ELEMENT_NODE){

System.out.print("子节点名:"+childNodes.item(k).getNodeName());

//元素节点若直接使用getNodeValue获取值将返回null,必须将值作为子节点,再获取值

//System.out.println("-->子节点值:"+childNodes.item(k).getFirstChild().getNodeValue());

//也可以直接用getTextContent方法,他将获取所有子节点的文本内容

System.out.println("-->子节点值:"+childNodes.item(k).getTextContent());

}

}

}

2、DOM方式生成XML

createElement("name"); 创建节点name

setAttribute("id", "1"); 给节点设置属性名为id、属性值为1

setTextContent("Java程序设计教程"); 设置节点的文本内容

appendChild(name1); 将子节点添加到节点中

除了常用的方法之外,还要创建Transformer对象,用于生成XML文档

public void createXML() throws Exception {

DocumentBuilder db = getDocumentBuilder();

Document document = db.newDocument();

document.setXmlStandalone(true);//xml文件的standalone为yes且不显示

Element bookstore = document.createElement("bookstore");//创建根节点bookstore

Element book1 = document.createElement("book");//创建子节点book

Element book2 = document.createElement("book");//创建子节点book

book1.setAttribute("id", "1");//给book设置属性名和属性值

book2.setAttribute("id", "2");//给book设置属性名和属性值

Element name1 = document.createElement("name");

Element name2 = document.createElement("name");

name1.setTextContent("Java程序设计教程");

name2.setTextContent("C语言程序设计");

book1.appendChild(name1);//将name添加到book节点中

book2.appendChild(name2);//将name添加到book节点中

bookstore.appendChild(book1);//将book节点添加到根节点中

bookstore.appendChild(book2);//将book节点添加到根节点中

document.appendChild(bookstore);//将根节点添加到DOM树中

//创建TransformerFactory对象

TransformerFactory tff = TransformerFactory.newInstance();

//创建Transformer对象

Transformer tf = tff.newTransformer();

tf.setOutputProperty(OutputKeys.INDENT, "yes");//生成的XML文件标签会换行

tf.transform(new DOMSource(document), new StreamResult(new File("books1.xml")));

}

注:文章根据本站相关课程的学习笔记整理而来,有错误或其他任何问题敬请指正,欢迎共同学习交流!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值