使用JAXP Dom解析xml

来源:互联网 发布:手机淘宝注册开店流程 编辑:程序博客网 时间:2024/06/03 15:58

一 将xml 载入内存

//1.创建工厂

 DocumentBuilderFactory factory=DocumentBuilderFactory.newInstance();
//2。得到dom解析器
 DocumentBuilder builder=factory.newDocumentBuilder();
//3。解析xml文档,得到代表文档的document

 Document document=builder.parse("src/book.xml");

二 读取xml内容

// 获取节点对象 返回值是一个集合
NodeList list = document.getElementsByTagName("书名");
// 获取集合中第二项
Node node = list.item(1);
//其实nodelist里面存的元素是Element 可以强转为Element 子类比父类 有更多的
Element element = (Element)list.item(1);
//读取element中的属性信息
String info=element.getAttribute("xx");

三 添加xml内容

// 创建节点
Element price = document.createElement("售价");
//设置节点内容
price.setTextContent("59.0元");
// 把创建的节点放到第一本书上
document.getElementsByTagName("书").item(0).appendChild(price);

//*********************************************

// 向文档中指定位置上添加节点

/ 创建节点
Element price = document.createElement("售价");
price.setTextContent("59.0元");

// 得到参考节点
Element refNode = (Element) document.getElementsByTagName("售价").item(0);
// 得到挂崽的节点
Element book = (Element) document.getElementsByTagName("书").item(0);
// 把创建的节点放到第一本书上
document.getElementsByTagName("书").item(0).appendChild(price);
// 往book节点指定位置插值
book.insertBefore(price, refNode);
//*******************************************

// 向文档节点 添加属性

refNode.setAttribute("addAtrr", "new cha ru value");

//删除xml中的元素

// 得到要删除的节点
Element refNode = (Element) document.getElementsByTagName("售价").item(0);
refNode.getParentNode().removeChild(refNode);
//删除属性
element.removeAttribute("xxx");

//更新xml


// 得到要更新的节点
Element refNode = (Element) document.getElementsByTagName("售价").item(0);
refNode.setTextContent("1000");
//**************************************
以上的代码 更新xml删除xml 或者是添加xml都只是在内存中把Dom模型更新了 需要重新写回文件才可以

Transformer transformer = TransformerFactory.newInstance().newTransformer();
DOMSource source = new DOMSource(document);
FileOutputStream outstream = new FileOutputStream(new File("src/outbook2.xml"));
StreamResult reslut = new StreamResult(outstream);
transformer.transform(source, reslut);
//用完输入流之后一定要关闭
outstream.close();