sax方式解析xml文档
来源:互联网 发布:沈阳 家具 盘古网络 编辑:程序博客网 时间:2024/05/16 13: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
- SAX方式解析XML文档
- sax方式解析xml文档
- android中用SAX方式解析XML文档
- XML文档的SAX解析方式
- SAX解析XML文档
- SAX解析xml文档
- SAX解析XML文档
- SAX解析xml文档
- SAX解析xml文档
- SAX解析XML文档
- SAX解析XML文档
- SAX解析XML文档
- SAX解析XML文档
- SAX解析XML文档
- sax解析xml文档
- SAX解析XML文档
- Sax解析Xml文档
- Sax解析XML文档
- VS2013在Unicode字符集下读写ANSI编码文件
- MySQL索引类型总结和使用技巧以及注意事项
- SuperMap iClient for JavaScript 时空数据动画的实现(二)
- 面试感悟----一名3年工作经验的程序员应该具备的技能
- MPU6050对卡尔曼、一阶互补滤波、二阶互补滤波的比较
- sax方式解析xml文档
- Task的用法学习(一)
- 路由套接字、密钥管理套接字、广播、多播
- Android网络加载通用LoadingView
- Android--打包工具,100个渠道包只需要10秒钟
- VS2013 NLPIR分词系统的使用及文本框多行显示
- Leetcode-longest-consecutive-sequence
- PHPMyadmin 配置
- stax方式解析xml文档