Dom 解析xml文档,实现xml文档结点的增删改查,遍历
2016-06-04 23:13
585 查看
打开MyEclipse新建一个Java Project
1. 新建xml包,在包中新建一个book.xml文档,代码如下:
新建包jaxp,在包中新建Demo类,代码如下:
1. 新建xml包,在包中新建一个book.xml文档,代码如下:
<?xml version="1.0" encoding="utf-8" standalone="no"?> <书架> <书 name="yyyyyy"> <售价>20元</售价> <书名>Java就业培训教程</书名> <作者>张孝祥</作者> </书> <书> <书名>JavaScript网页开发</书名> <作者>张孝祥</作者> <售价>28.00元</售价> </书> </书架>
新建包jaxp,在包中新建Demo类,代码如下:
package jaxp; import java.io.File; import java.io.IOException; import javax.xml.parsers.DocumentBuilder; import javax.xml.parsers.DocumentBuilderFactory; import javax.xml.parsers.ParserConfigurationException; import javax.xml.transform.Transformer; import javax.xml.transform.TransformerFactory; import javax.xml.transform.dom.DOMSource; import javax.xml.transform.stream.StreamResult; import org.junit.Test; import org.w3c.dom.Document; import org.w3c.dom.Element; import org.w3c.dom.Node; import org.w3c.dom.NodeList; import org.xml.sax.SAXException; public class Demo { /*jaxp解析xml文档*/ @Test public void read() throws Exception{ //读取xml文档的元素值 //1.获取工厂 DocumentBuilderFactory factory= DocumentBuilderFactory.newInstance(); //2.产生解析器 DocumentBuilder builder=factory.newDocumentBuilder(); //3.解析xml文档,得到代表文档的document对象 Document document=builder.parse(new File("src/xml/book1.xml")); //根据标签名获取节点列表 NodeList list=document.getElementsByTagName("售价"); //获取节点列表里的第二个节点 Node price=list.item(1); //获取节点的值 String value=price.getTextContent(); System.out.println(value); } @Test public void update() throws Exception{ //修改xml文件标签的值 //1.获取工厂 DocumentBuilderFactory factory= DocumentBuilderFactory.newInstance(); //2.产生解析器 DocumentBuilder builder=factory.newDocumentBuilder(); //3.解析xml文档,得到代表文档的document对象 Document document=builder.parse(new File("src/xml/book1.xml")); //获取需要修改的标签节点,将修改后的值设置为20元 Node price=document.getElementsByTagName("售价").item(0); price.setTextContent("20元"); //将内存中修改后的doucement写回xml文档 //获取工厂 TransformerFactory tf=TransformerFactory.newInstance(); //获取转换器 Transformer ts=tf.newTransformer(); //将document写回book.xml文当 ts.transform(new DOMSource(document), new StreamResult(new File("src/xml/book1.xml"))); } @Test public void add() throws Exception{ //向xml当中增加标签 //1.获取工厂 DocumentBuilderFactory factory= DocumentBuilderFactory.newInstance(); //2.产生解析器 DocumentBuilder builder=factory.newDocumentBuilder(); //3.解析xml文档,得到代表文档的document对象 Document document=builder.parse(new File("src/xml/book1.xml")); //创建需要增加的节点 Node price=document.createElement("售价"); price.setTextContent("50元"); //得到需要增加节点的父亲 Node parent=document.getElementsByTagName("书").item(0); //把需要增加的节点挂到父节点上 parent.appendChild(price); /*把要添加的标签挂到父节点的指定位置 * parent.insertBefore(price, document.getElementsByTagName("书名").item(0)); */ //将内存中修改后的doucement写回xml文档 //获取工厂 TransformerFactory tf=TransformerFactory.newInstance(); //获取转换器 Transformer ts=tf.newTransformer(); //将document写回book.xml文当 ts.transform(new DOMSource(document), new StreamResult(new File("src/xml/book1.xml"))); } @Test public void delete() throws Exception{ //删除xml文当中的标签 //1.获取工厂 DocumentBuilderFactory factory= DocumentBuilderFactory.newInstance(); //2.产生解析器 DocumentBuilder builder=factory.newDocumentBuilder(); //3.解析xml文档,得到代表文档的document对象 Document document=builder.parse(new File("src/xml/book1.xml")); //得到需要删除的节点 Node price=document.getElementsByTagName("售价").item(1); //由于节点不能自己删除自己,需要获取其父节点,根据其父节点删除 price.getParentNode().removeChild(price); //将内存中修改后的doucement写回xml文档 //获取工厂 TransformerFactory tf=TransformerFactory.newInstance(); //获取转换器 Transformer ts=tf.newTransformer(); //将document写回book.xml文当 ts.transform(new DOMSource(document), new StreamResult(new File("src/xml/book1.xml"))); } @Test public void updateAttribute() throws Exception{ //更改xml文当中标签的属性值 //1.获取工厂 DocumentBuilderFactory factory= DocumentBuilderFactory.newInstance(); //2.产生解析器 DocumentBuilder builder=factory.newDocumentBuilder(); //3.解析xml文档,得到代表文档的document对象 Document document=builder.parse(new File("src/xml/book1.xml")); //操作xml文档的元素时,一般都把元素当作node对象,但是程序员如果发现node不好使时,就应把node强转成相应类型 //得到需要更改属性的元素 Element book=(Element) document.getElementsByTagName("书").item(0); book.setAttribute("name", "yyyyyy"); book.setAttribute("password", "123456"); //将内存中修改后的doucement写回xml文档 //获取工厂 TransformerFactory tf=TransformerFactory.newInstance(); //获取转换器 Transformer ts=tf.newTransformer(); //将document写回book.xml文当 ts.transform(new DOMSource(document), new StreamResult(new File("src/xml/book1.xml"))); } public static void list(Node node){ //遍历book.xml文档中的所有Node if(node.getNodeType()==Node.ELEMENT_NODE){ //判断node是否是Node类型 System.out.println(node.getNodeName()); //System.out.println(node.getTextContent()); } NodeList lis=node.getChildNodes(); for(int i=0;i<lis.getLength();i++){ list(lis.item(i)); } } public static void main(String args[]) throws Exception{ //1.获取工厂 DocumentBuilderFactory factory= DocumentBuilderFactory.newInstance(); //2.产生解析器 DocumentBuilder builder=factory.newDocumentBuilder(); //3.解析xml文档,得到代表文档的document对象 Document document=builder.parse(new File("src/xml/book1.xml")); //遍历book.xml文档的所有节点 list(document); } }
相关文章推荐
- 71. Simplify Path
- Class.forName()用法详解
- 加速度传感器的原理和应用-手机翻转、失重检测、运动检测、位置识别
- 121. Best Time to Buy and Sell Stock
- JavaScript快速学习
- Android带Library项目的导入过程
- JAXP SAX模式解析xml文档
- Centos7 搭建Redis3.2.0版本集群环境
- 加密算法比较3DES AES RSA ECC MD5 SHA1等
- 物联网网络编程、Web编程综述
- DOM4j 解析xml文档,完成增删改查
- UNIX网络编程 第一章
- Spring学习(十三)Spring Bean 的命名方式介绍
- Trie
- 两款JSON类库Jackson与JSON-lib的性能对比
- 蓝牙(BLE)应用框架接口设计和应用开发——以TI CC2541为例
- 从零开始搭建微信硬件开发环境全过程——1小时掌握微信硬件开发流程
- 二分思路总结
- WebService 的缓存机制
- POJ 2688 Cleaning Robot