您的位置:首页 > 编程语言 > Java开发

java对XML文档的操作之dom(使用jaxp,sun公司的自带包)

2017-08-02 14:03 836 查看
测试的XML文档:(注意,该文档是放在src文件夹下的,不是和java文件放在同一个包,不然读取xml时会出错)

<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<商店>
<商品>
<名称 name="hhhhh">A商品</名称>
<价格>890元</价格>
<数量>1</数量>
</商品>
<商品>
<名称>B商品</名称>
<价格>50</价格>
<数量>5</数量>
</商品>

</商店>


java代码(包括对XML文档的增删改查)

package com.cx.day0802;

import java.io.FileOutputStream;

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;

public class Demo1 {

@Test
public void read() throws Exception{
//读取dom文档,读取某个节点的内容
//1、获取 DocumentBuilderFactory 的新实例。
DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();

//2、创建一个新的 DocumentBuilder 实例。
DocumentBuilder builder = factory.newDocumentBuilder();

//3、获得dom对象
Document dom = builder.parse("src/test.xml");

//获取指定标签
NodeList list = dom.getElementsByTagName("价格");

//获取第几个的标签从0开始
Node node = list.item(0);

//输出标签体
System.out.println(node.getTextContent());
}

@Test
public void read1() throws Exception{
//读取dom文档,读取某个节点的属性
//1、获取 DocumentBuilderFactory 的新实例。
DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();

//2、创建一个新的 DocumentBuilder 实例。
DocumentBuilder builder = factory.newDocumentBuilder();

//3、获得dom对象
Document dom = builder.parse("src/test.xml");

//获取指定标签的属性,,这里强制转换为Element类型,直接操作根据属性名取值
Element e = (Element) dom.getElementsByTagName("名称").item(0);
System.out.println(e.getAttribute("name"));
}

@Test
public void read2() throws Exception{
//读取dom文档,读取所有节点标签
//1、获取 DocumentBuilderFactory 的新实例。
DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();

//2、创建一个新的 DocumentBuilder 实例。
DocumentBuilder builder = factory.newDocumentBuilder();

//3、获得dom对象
Document dom = builder.parse("src/test.xml");

//获取根节点
Node root = dom.getElementsByTagName("商店").item(0);

//递归实现
list(root);
}

private void list(Node node) {

//如果是节点元素就输出
if(node instanceof Element){
System.out.println(node.getNodeName());
}
//获取节点的子节点
NodeList clist = node.getChildNodes();

//循环输出子节点标签
for(int i=0; i<clist.getLength();i++){
//递归
list(clist.item(i));
}

}

@Test
public void add() throws Exception{
//读取dom文档,增加节点标签
//1、获取 DocumentBuilderFactory 的新实例。
DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();

//2、创建一个新的 DocumentBuilder 实例。
DocumentBuilder builder = factory.newDocumentBuilder();

//3、获得dom对象
Document dom = builder.parse("src/test.xml");

//读取要增加节点标签的父节点,强制转换为Element
Element e = (Element) dom.getElementsByTagName("商品").item(0);

//建立新节点
Element newE = dom.createElement("新标签");
newE.setTextContent("400元");

//向父节点增加新节点标签
e.appendChild(newE);

//从内存中保存到xml文档中

//实例化TransformerFactory工厂类,将源树转换为结果树。
TransformerFactory tffactor = TransformerFactory.newInstance();
//创建执行从 Source 到 Result 的复制的新 Transformer。
Transformer tf = tffactor.newTransformer();
//将 XML Source 转换为 Result。
tf.transform(new DOMSource(dom), new StreamResult(new FileOutputStream("src/test.xml")));

}

@Test
public void add1() throws Exception{
//读取dom文档,向指定位置增加节点标签
//1、获取 DocumentBuilderFactory 的新实例。
DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();

//2、创建一个新的 DocumentBuilder 实例。
DocumentBuilder builder = factory.newDocumentBuilder();

//3、获得dom对象
Document dom = builder.parse("src/test.xml");

//读取要增加节点标签的父节点,强制转换为Element
Element e = (Element) dom.getElementsByTagName("商品").item(0);

//建立新节点
Element newE = dom.createElement("新标签");
newE.setTextContent("400元");

//获得指定位置之后的节点
Element ref = (Element) dom.getElementsByTagName("价格").item(0);

//向父节点增加新节点标签
e.insertBefore(newE, ref);

//从内存中保存到xml文档中

//实例化TransformerFactory工厂类,将源树转换为结果树。
TransformerFactory tffactor = TransformerFactory.newInstance();
//创建执行从 Source 到 Result 的复制的新 Transformer。
Transformer tf = tffactor.newTransformer();
//将 XML Source 转换为 Result。
tf.transform(new DOMSource(dom), new StreamResult(new FileOutputStream("src/test.xml")));

}

@Test
public void delete() throws Exception{

//读取dom文档,删除指定位置节点标签
//1、获取 DocumentBuilderFactory 的新实例。
DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();

//2、创建一个新的 DocumentBuilder 实例。
DocumentBuilder builder = factory.newDocumentBuilder();

//3、获得dom对象
Document dom = builder.parse("src/test.xml");

Element e = (Element) dom.getElementsByTagName("新标签").item(0);

//获得该节点的父节点,其父节点删除该节点
e.getParentNode().removeChild(e);

//从内存中保存到xml文档中

//实例化TransformerFactory工厂类,将源树转换为结果树。
TransformerFactory tffactor = TransformerFactory.newInstance();
//创建执行从 Source 到 Result 的复制的新 Transformer。
Transformer tf = tffactor.newTransformer();
//将 XML Source 转换为 Result。
tf.transform(new DOMSource(dom), new StreamResult(new FileOutputStream("src/test.xml")));

}

@Test
public void update() throws Exception{

//读取dom文档,删除指定位置节点标签
//1、获取 DocumentBuilderFactory 的新实例。
DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();

//2、创建一个新的 DocumentBuilder 实例。
DocumentBuilder builder = factory.newDocumentBuilder();

//3、获得dom对象
Document dom = builder.parse("src/test.xml");

Element e = (Element) dom.getElementsByTagName("价格").item(0);

//获得该节点的父节点,其父节点删除该节点
e.setTextContent("890元");

//从内存中保存到xml文档中

//实例化TransformerFactory工厂类,将源树转换为结果树。
TransformerFactory tffactor = TransformerFactory.newInstance();
//创建执行从 Source 到 Result 的复制的新 Transformer。
Transformer tf = tffactor.newTransformer();
//将 XML Source 转换为 Result。
tf.transform(new DOMSource(dom), new StreamResult(new FileOutputStream("src/test.xml")));

}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  java xml