dom方式解析xml文档
来源:互联网 发布:政府网络信息安全 编辑:程序博客网 时间:2024/05/16 12:58
public class DomDemo1 { @Test //需求:把第一个user节点的name的值取出来 public void getDom() throws Exception { //第一步,通过DocumentBuilderFactory类中的工厂方法等到一个dbf对象 DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance(); //第二步,通过dbf对象创建出一个DocumentBuilder对象 DocumentBuilder db = dbf.newDocumentBuilder(); //第三步,通过db对象创建出一个Document对象 Document dom = db.parse("./xml4/users.xml");// new File("./xml4/users.xml") //System.out.println("dom:"+dom); //然后进行dom操作 Node root= dom.getFirstChild();//根节点 //System.out.println("root:"+root); System.out.println(root.getNodeName()); System.out.println(root.getFirstChild().getNodeName()); //上面一句的输出是:#text ----dom中把空白符也看成是一个Node,这种情况对我们的解析通常会造成很大的麻烦 //※※为解决上面的问题,我们以后解析时尽量不要用Node,而要用Element。因为Element是元素它不包含属性和文字内容(包括空白符),因此可避开空白符的干扰 Element eRoot = (Element)root; NodeList list = eRoot.getElementsByTagName("user"); System.out.println("user元素的数量:"+list.getLength()); System.out.println("第1个user元素"+list.item(0));//通过item(index)来获取列表中的元素 System.out.println("第2个user元素"+list.item(1)); Node user1Node = list.item(0); Element eUser1 = (Element)user1Node;//要把Node强转成Element,因为Element是子接口,里面有getElementBy*等方法,而Node没有(只能采用childNodes的方式,这种方式会受空白符的干扰) NodeList listNames = eUser1.getElementsByTagName("name"); String nm = listNames.item(0).getNodeName();//name--标签名 String nmVal = listNames.item(0).getTextContent();//标签内部所包含的文本内容----innerText System.out.println(nm+","+nmVal); //bug::::直接通过dom对象获取其下节点---经测试,无法通过id来获取 Element ee = dom.getElementById("aa"); System.out.println("###: "+ee);//null } @Test //需求:把第二个user节点的age值取出来 public void getAge()throws Exception{ DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance(); DocumentBuilder db = dbf.newDocumentBuilder(); Document dom = db.parse("./xml4/users.xml"); Element root = (Element) dom.getFirstChild(); Element user2 =(Element) root.getElementsByTagName("user").item(1); Element eAge =(Element) user2.getElementsByTagName("age").item(0); String age = eAge.getTextContent(); System.out.println("age:"+age); } //用Java对xml文档进行CRUD---创建,遍历,更新,删除 //遍历 @Test public void query() throws Exception{ DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance(); DocumentBuilder db = factory.newDocumentBuilder(); Document dom = db.parse( new File("./xml4/users.xml") ); Element root = (Element) dom.getFirstChild(); NodeList list = root.getElementsByTagName("user"); for(int i=0;i<list.getLength();i++){ Element user =(Element) list.item(i); String id = user.getAttribute("id"); String name = user.getElementsByTagName("name").item(0).getTextContent(); String age = user.getElementsByTagName("age").item(0).getTextContent(); System.out.println("id:"+id+",name:"+name+",age:"+age); System.out.println("-----------------------"); } } //更新---把最后一个user的年龄+10 @Test public void update() throws Exception{ DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance(); DocumentBuilder db = factory.newDocumentBuilder(); Document dom = db.parse( new File("./xml4/users.xml") ); Element root = (Element) dom.getFirstChild(); //Element eUser = (Element) root.getLastChild();//注意bug:如果最后一个</user>和</users>标签之前有空白符(包括换行),那么该句获得的节点是空白符 //System.out.println(root.getLastChild().getNodeName());//#text NodeList list = root.getElementsByTagName("user"); Element eUser = (Element) list.item(list.getLength()-1); Element eAge = (Element) eUser.getElementsByTagName("age").item(0); int age = Integer.parseInt(eAge.getTextContent().trim())+10; eAge.setTextContent(""+age); System.out.println(age); //把内存中的当前dom对象存储到xml文件 TransformerFactory tf = TransformerFactory.newInstance(); Transformer trans = tf.newTransformer(); trans.transform(new DOMSource(dom), new StreamResult("./xml4/users.xml"));//把xml源 输出到 目标 ---如果目标存在则是更新,否则是创建 } //创建 --需求:添加一个新的user @Test public void create() throws Exception{ DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance(); DocumentBuilder db = factory.newDocumentBuilder(); Document dom = db.parse( new File("./xml4/users.xml") ); Element root = (Element) dom.getFirstChild(); //创建一个新的user元素 Element eUserNew = dom.createElement("user"); eUserNew.setAttribute("id", "C001"); //创建name和age子元素 Element eName = dom.createElement("name"); eName.setTextContent("李四"); Element eAgeNew = dom.createElement("age"); eAgeNew.setTextContent("22"); //把所创建的元素组装成一棵子树,添加到整棵dom树上 eUserNew.appendChild(eName); eUserNew.appendChild(eAgeNew); root.appendChild(eUserNew); //把内存中的当前dom对象存储到xml文件 TransformerFactory tf = TransformerFactory.newInstance(); Transformer trans = tf.newTransformer(); trans.transform(new DOMSource(dom), new StreamResult("./xml4/users.xml"));//把xml源 输出到 目标 ---如果目标存在则是更新,否则是创建 } //删除---需求:删除最后一个元素 @Test public void delete() throws Exception{ DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance(); DocumentBuilder db = factory.newDocumentBuilder(); Document dom = db.parse( new File("./xml4/users.xml") ); Element root = (Element) dom.getFirstChild(); //获取将要删除的元素 NodeList list = root.getElementsByTagName("user"); Element e = (Element) list.item( list.getLength()-1 ); e.getParentNode().removeChild(e); //把内存中的当前dom对象存储到xml文件 TransformerFactory tf = TransformerFactory.newInstance(); Transformer trans = tf.newTransformer(); trans.transform(new DOMSource(dom), new StreamResult("./xml4/users.xml")); }}
0 0
- dom方式解析xml文档
- 解析XML文档方式之一:dom方式
- 以 DOM 方式解析XML文档
- js 通过DOM方式解析XML文档
- Dom解析XML文档
- DOM 解析 XML 文档
- DOM解析XML文档
- DOM解析XML文档
- DOM解析XML文档
- DOM解析XML文档
- DOM解析XML文档
- Dom解析XMl文档
- DOM解析XML文档
- dom解析XML文档
- DOM解析XML文档
- dom解析xml文档
- DOM解析XML文档
- DOM解析XML文档
- 字符串只保留开头跟最后一个字符
- C语言 冒泡排序
- 软件公司的两种管理方式
- 阴阳五行
- 自动完成文本框(AutoCompleteTextView)提示文本框
- dom方式解析xml文档
- java异常与异常处理
- CBO相关原理--统计信息
- 建立自己的网站
- data.table包基础学习教程
- [第一天]金额转换,阿拉伯数字的金额转换成中国传统的形式如
- scala eclipse sbt( Simple Build Tool) 应用程序开发
- 常见的第三方组件——Ninject
- 唐僧为什么可以领导孙悟空(项目管理)