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); } }
xml解析-jaxp之dom解析,布布扣,bubuko.com
原文:http://blog.csdn.net/hymking/article/details/25839795