要解析XML文件,首先要获得XML的DOM树,方法如下: //获取DOM解析器工 //DocumentBuilderFactory documentBuilderFactory = DocumentBuilderFactory.newInstance(); //获取DOM解析器 //DocumentBuilder documentBuilder = documentBuilderFactory.newDocumentBuilder(); //用DOM解析器解析XML,并生成DOM树 //Document document = documentBuilder.parse("src/book.xml"); XML文档如下: <?xml version="1.0" encoding="UTF-8" standalone="no"?><书架> <书 大小="非常非常大"> <书名>Java就业培训教程</书名> <作者>张孝详</作者> <批发价>8元</批发价> <售价>28.0元</售价> </书> <书 大小="猪肉"> <书名>JavaScript从入门到精通</书名> <作者>戴振良</作者> <售价>88.00元</售价> </书> </书架> 需要: // 1、得到某个具体的节点内容 //打印第2本书的作者元素的主体内容 //Document.getElementsByTagName(String tagName);获取元素列表 //NodeList.item(int index);获取元素列表中的某个节点 //Node.getTextContent();获取节点主体内容 // 2、遍历所有元素节点(用递归) //Node.getNodeType();获取节点类型 //node.getNodeName();获取节点名称 //node.getChildNodes();获取子节点列表 // 3、修改某个元素节点的主体内容 //修改第2个售价节点的内容 //Node.setTextContent();设置节点主体内容 //注:设置后要把DOM写回XML文件 //凡是set(设置)操作的,设置的是内存里的DOM树,需要把这个树写回文件,方法如下: //TransformerFactory transformerFactory = TransformerFactory.newInstance(); // Transformer transformer = transformerFactory.newTransformer(); // transformer.transform(new DOMSource(document), new StreamResult("src/book.xml")); // 4、向指定元素节点中增加子元素节点 //在第1本书中增加子元素节点,<内部价>58.00元</内部价> //Document.createElement();创建元素 //Node.appendChild();增加元素到子节点 // 5、向指定元素节点上增加同级元素节点 //在第一本书的售价前面插入<批发价>10</批发价> //Node.insertBefore(新元素,);插入一个新元素到子节点前面 // 6、删除指定元素节点 //删除内部价 //Node.removeChild(子节点);删除指定的子节点 //把DOM写回XML文件 // 7、操作XML文件属性 //获取第一个“书”的“大小”的属性值 //Element.getAttribute();获取属性 // 8、操作XML文件属性 //设置第一个“书”的“大小”的属性值\ //Element.setAttribute(属性名,属性值); package com.itheima; import javax.xml.parsers.DocumentBuilder; import javax.xml.parsers.DocumentBuilderFactory; import javax.xml.parsers.ParserConfigurationException; import javax.xml.transform.Transformer; import javax.xml.transform.TransformerConfigurationException; import javax.xml.transform.TransformerFactory; import javax.xml.transform.dom.DOMSource; import javax.xml.transform.stream.StreamResult; import org.w3c.dom.Document; import org.w3c.dom.Element; import org.w3c.dom.NodeList; import org.w3c.dom.Node; public class JaxpCRUD { public static void main(String[] args) throws Exception { //获取DOM解析器工厂,以便生产解析器 DocumentBuilderFactory documentBuilderFactory = DocumentBuilderFactory.newInstance(); //获取DOM解析器,以便解析DOM DocumentBuilder documentBuilder = documentBuilderFactory.newDocumentBuilder(); //解析DOM Document document = documentBuilder.parse("src/book.xml"); //test01(document); // test02(document); // test03(document); // test04(document); // test05(document); // test06(document); // test07(document); test08(document); } // 1、得到某个具体的节点内容 //打印第2本书的作者元素的主体内容 private static void test01(Document document) throws Exception { NodeList list = document.getElementsByTagName("作者"); // System.out.println(list.getLength()); Node node = list.item(1); String content = node.getTextContent();//获取主体内容 System.out.println(content); } // 2、遍历所有元素节点 private static void test02(Node node) { if(node.ELEMENT_NODE==node.getNodeType()) System.out.println(node.getNodeName()); if(node.hasChildNodes()) { NodeList nodeList = node.getChildNodes(); for(int i=0;i<nodeList.getLength();i++) test02(nodeList.item(i)); } } // 3、修改某个元素节点的主体内容 private static void test03(Document document) throws Exception { Node price = document.getElementsByTagName("售价").item(1); price.setTextContent("88.00元"); TransformerFactory transformerFactory = TransformerFactory.newInstance(); Transformer transformer = transformerFactory.newTransformer(); transformer.transform(new DOMSource(document), new StreamResult("src/book.xml")); } // 4、向指定元素节点中增加子元素节点 ////在第1本书中增加子元素节点,<内部价>58.00元</内部价> private static void test04(Document document) throws Exception { //获得第一个 书节点 Node bookNode = document.getElementsByTagName("书").item(0); //创建一个元素,并设置主体内容 Element innerPriceElement = document.createElement("内部价"); innerPriceElement.setTextContent("12.00元"); //把元素增加到节点,即成为了元素节点 bookNode.appendChild(innerPriceElement); //把DOM写回XML文件 TransformerFactory transformerFactory = TransformerFactory.newInstance(); Transformer transformer = transformerFactory.newTransformer(); transformer.transform(new DOMSource(document), new StreamResult("src/book.xml")); } // 5、向指定元素节点上增加同级元素节点 //在第一本书的售价前面插入<批发价>10</批发价> private static void test05(Document document) throws Exception{ //得到每一个售价 Node salePriceNode = document.getElementsByTagName("售价").item(0); //创建新元素,并设置主体内容 Element wholesaleElement = document.createElement("批发价"); wholesaleElement.setTextContent("8元"); //把新元素增加到节点 salePriceNode.getParentNode().insertBefore(wholesaleElement, salePriceNode); //把DOM写回XML文件 TransformerFactory transformerFactory = TransformerFactory.newInstance(); Transformer transformer = transformerFactory.newTransformer(); transformer.transform(new DOMSource(document), new StreamResult("src/book.xml")); } // 6、删除指定元素节点 ////删除内部价 //把DOM写回XML文件 private static void test06(Document document) throws Exception { //获得内部价节点 Node innerPriceNode = document.getElementsByTagName("内部价").item(0); //删除内部节点 innerPriceNode.getParentNode().removeChild(innerPriceNode); TransformerFactory transformerFactory = TransformerFactory.newInstance(); Transformer transformer = transformerFactory.newTransformer(); transformer.transform(new DOMSource(document), new StreamResult("src/book.xml")); } // 7、操作XML文件属性 //获取第一个“书”的“大小”的属性值 private static void test07(Document document){ Node bookNode = document.getElementsByTagName("书").item(0); Element bookElement = (Element)bookNode; String attrValue = bookElement.getAttribute("大小"); System.out.println(attrValue); } // 8、操作XML文件属性 //设置第一个“书”的“大小”的属性值 private static void test08(Document document) throws Exception{ Node bookNode = document.getElementsByTagName("书").item(0); Element bookElement = (Element)bookNode; bookElement.setAttribute("大小","非常非常大"); TransformerFactory tf = TransformerFactory.newInstance(); Transformer t = tf.newTransformer(); t.transform(new DOMSource(document), new StreamResult("src/book.xml")); } }