zoukankan      html  css  js  c++  java
  • xml解析-jaxp之dom解析

    package day06_parser.dom;
    /**
     * xml的解析技术:JAXP是Java API for XML Processing的英文字头缩写,
     * 中文含义是:用于XML文档处理的使用Java语言编写的编程接口。JAXP支持DOM、SAX、XSLT等标准。
     * 以下我们研究两种解析方式:
     * 1.dom解析	2.sax解析:Simple API for XML
     * 以下是dom解析的实例。

    * JAXP-DOM解析实例: * 以下的实例实现的功能是,通过javax.xml包实现dom方式的xml的解析 * 详细的操作有添加节点,删除节点,改动节点内容,查询节点信息 */ import java.io.File; import javax.xml.parsers.*; import javax.xml.transform.*; import javax.xml.transform.dom.*; import javax.xml.transform.stream.StreamResult; import org.junit.Test; import org.w3c.dom.*; public class DOMCURD { //可以用junit測试工具的方法进行測试 public static void main(String[] args) throws Exception{ demo05(); } //获取和解析器关联的Document对象 @Test public static void demo01() throws Exception{ //==============获得document========================== //1.获得工厂 DocumentBuilderFactory factory=DocumentBuilderFactory.newInstance(); //2.获得解析器 DocumentBuilder builder=factory.newDocumentBuilder(); //3.依据解析器获取Document对象 @SuppressWarnings("unused") Document document=builder.parse(new File("db.xml")); } //查询 public static void demo02() throws Exception{ //1.获得document DocumentBuilderFactory factory=DocumentBuilderFactory.newInstance(); DocumentBuilder builder=factory.newDocumentBuilder(); Document document=builder.parse(new File("db.xml")); //2.获得根元素--books(可以省略) @SuppressWarnings("unused") Element rootElement=document.getDocumentElement(); //3.获取全部的book元素。属性id NodeList allBookElements=document.getElementsByTagName("book"); //4遍历book元素----本实例db.xml中有两个book元素 for(int i=0;i<allBookElements.getLength();i++){ Element childNode=(Element)allBookElements.item(i); System.out.println(i); //4.1获取book元素的id属性 String id=childNode.getAttribute("id"); System.out.println("###id:"+id); System.out.println(childNode.getNodeName()); //4.2获取book元素下的子节点 NodeList childNodeList=childNode.getChildNodes(); //注意文本也是节点,所以回车换行的部分会是文本,也会加入到上面定义的childNodeList中 //遍历 for(int j=0;j<childNodeList.getLength();j++) { //做推断-是否是非文本节点 Node childNode2=childNodeList.item(j); //有两种方式推断是否一定是元素 //================方法1========================= if(childNode2.getNodeType()==Node.ELEMENT_NODE) { //获取标签的名称 System.out.print(childNode2.getNodeName()); System.out.println(":"); //获取元素标签的内容 System.out.println(childNode2.getTextContent()); } //===============方法2========================== if(childNode2 instanceof Element) {//...........} //============================================= } } } } //添加 public static void demo03() throws Exception{ //获取doument对象-dom方式 DocumentBuilderFactory factory=DocumentBuilderFactory.newInstance(); DocumentBuilder builder=factory.newDocumentBuilder(); Document document=builder.parse(new File("db.xml")); //获取根元素 Element rootElement=document.getDocumentElement(); //创建新元素,不要以为是rootElement创建的哦,Document创建。用appendchild()关联 Element bookElement=document.createElement("book"); //为元素创建id属性 bookElement.setAttribute("id", "b0003"); //为book元素创建子元素 Element newTitleElement=document.createElement("title"); newTitleElement.setTextContent("Flex开发"); Element newPriceElement=document.createElement("price"); newPriceElement.setTextContent("98"); Element newAuthorElement=document.createElement("author"); newAuthorElement.setTextContent("胡玉勉"); bookElement.appendChild(newTitleElement); bookElement.appendChild(newPriceElement); bookElement.appendChild(newAuthorElement); //将book加入到根节点rootElement下 rootElement.appendChild(bookElement); //=======将创建好了新元素的document更新到原来的文件里===== //运用javax.transform技术 TransformerFactory tformFactory=TransformerFactory.newInstance(); //transform(Source xmlSource, Result outputTarget) //将 XML Source 转换为 Result。 Transformer transformer=tformFactory.newTransformer(); //这里面的參数不用rootElement,用document Source xmlSource=new DOMSource(document); Result outputTarget=new StreamResult(new File("db.xml")); transformer.transform(xmlSource, outputTarget); } //删除-通过父节点删除子节点 @SuppressWarnings("unused") public static void demo04() throws Exception{ //获取document DocumentBuilderFactory factory=DocumentBuilderFactory.newInstance(); DocumentBuilder builder=factory.newDocumentBuilder(); Document document=builder.parse(new File("db.xml")); //获取根元素 Element rootElement=document.getDocumentElement(); //删除某一个book元素,比方id为“b003” //1.获取id为“b003”的元素 NodeList allBookElement = document.getElementsByTagName("book"); for(int m = 0 ; m < allBookElement.getLength() ; m ++){ Element bookElement = (Element) allBookElement.item(m); String id = bookElement.getAttribute("id"); if("b0003".equals(id)){ //注意删除节点的时候,应遵循由自己找到父节点。然后通过父节点删除 bookElement.getParentNode().removeChild(bookElement); } } //=======将删除了的document更新到原来的文件里===== //运用javax.transform技术:Transformer此抽象类的实例可以将源树转换为结果树 TransformerFactory tformFactory=TransformerFactory.newInstance(); //transform(Source xmlSource, Result outputTarget) //将 XML Source 转换为 Result。 Transformer transformer=tformFactory.newTransformer(); //这里面的參数不用rootElement。用document Source xmlSource=new DOMSource(document); Result outputTarget=new StreamResult(new File("db.xml")); transformer.transform(xmlSource, outputTarget); } //改动 @SuppressWarnings("unused") public static void demo05() throws Exception{ //获取document DocumentBuilderFactory factory=DocumentBuilderFactory.newInstance(); DocumentBuilder builder=factory.newDocumentBuilder(); Document document=builder.parse(new File("db.xml")); Element rootElement=document.getDocumentElement(); //获取元素进行改动 NodeList bookNodeList=document.getElementsByTagName("book"); //遍历,对id=“b002”的book元素进行改动 for(int i=0;i<bookNodeList.getLength();i++){ Element bookNode=(Element)bookNodeList.item(i); String id=bookNode.getAttribute("id"); if("b002".equals(id)){ //获取元素的子节点进行改动 NodeList childNodeList=bookNode.getChildNodes(); for(int j=0;j<childNodeList.getLength();j++){ Node bookChildNode=childNodeList.item(j); System.out.println(bookChildNode.getNodeName()); bookChildNode.setTextContent("改动了节点的文本内容"); System.out.println(bookChildNode.getTextContent()); } } } //记住别忘了回写到xml文件里 //=======将删除了的document更新到原来的文件里===== //运用javax.transform技术:Transformer此抽象类的实例可以将源树转换为结果树 TransformerFactory tformFactory=TransformerFactory.newInstance(); //transform(Source xmlSource, Result outputTarget) //将 XML Source 转换为 Result。 Transformer transformer=tformFactory.newTransformer(); //这里面的參数不用rootElement,用document Source xmlSource=new DOMSource(document); Result outputTarget=new StreamResult(new File("db.xml")); transformer.transform(xmlSource, outputTarget); } }


  • 相关阅读:
    AD域渗透测试笔记
    ctf之WEB练习一
    CTF之crpto练习三
    ctf之WEB练习二
    ctf之WEB练习三
    [转]Ant学习笔记——自己构建Ant编译环境
    [转]【NoSQL】NoSQL入门级资料整理(CAP原理、最终一致性)
    啥叫异步调用
    C++中虚函数的作用是什么?它应该怎么用呢?
    [转]Thrift连接池实现
  • 原文地址:https://www.cnblogs.com/mqxnongmin/p/10655853.html
Copyright © 2011-2022 走看看