使用jaxp对XML文件进行dom解析
来源:互联网 发布:java concurrent书籍 编辑:程序博客网 时间:2024/06/05 09:15
简述
使用jaxp对XML文件进行dom解析,实现增删查改和遍历,代码如下,每一行代码都有注释。
思路:和jsp的dom解析几乎一样,方法名都很像。这里先得到document对象,然后利用document的一些方法去实现想要的操作。Node接口是Element接口和Text接口的父接口。
xml文件
对应的xml文件如下(person.xml):
<?xml version="1.0" encoding="UTF-8" standalone="no"?><person> <P1> <name>AAA</name> <age>12</age> </P1> <P1> <name>BBB</name> <age>123</age> </P1></person>
代码
package xxy.test.jaxp;import java.io.IOException;import javax.xml.parsers.DocumentBuilder;import javax.xml.parsers.DocumentBuilderFactory;import javax.xml.parsers.ParserConfigurationException;import javax.xml.transform.Transformer;import javax.xml.transform.TransformerException;import javax.xml.transform.TransformerFactory;import javax.xml.transform.dom.DOMSource;import javax.xml.transform.stream.StreamResult;import org.w3c.dom.Element;import org.w3c.dom.Node;import org.w3c.dom.NodeList;import org.w3c.dom.Text;import org.xml.sax.SAXException;/** * @author 许湘扬 2017-2-21 * @jaxp解析dom操作 * @注:增删操作,最后要回写,将在内存中的dom对象写入文件 */public class TestJaxp { public static void main(String[] args) throws ParserConfigurationException, SAXException, IOException, TransformerException { //selectAll(); //selectFirst(); //addSex(); //modifyNodeText(); //delSex(); listElement(); } /* * 查询第一个name元素的值 */ public static void selectFirst() throws ParserConfigurationException, IOException, SAXException { //1、创建解析器工厂 DocumentBuilderFactory builderFactory=DocumentBuilderFactory.newInstance(); //2、用解析器工厂创建解析器 DocumentBuilder docuBuilder=builderFactory.newDocumentBuilder(); //3、解析xml,返回document org.w3c.dom.Document document=docuBuilder.parse("src/person.xml"); //4、得到所有name元素 NodeList nodelist=document.getElementsByTagName("name"); //5、获得第一个name元素 Node name1=nodelist.item(0); //6、得到name元素里的文本 String text=name1.getTextContent(); System.out.println(text); } /* * 查询所有<name>节点 */ public static void selectAll() throws ParserConfigurationException, SAXException, IOException { //1、创建解析器工厂 DocumentBuilderFactory builderFactory=DocumentBuilderFactory.newInstance(); //2、用解析器工厂创建解析器 DocumentBuilder docuBuilder=builderFactory.newDocumentBuilder(); //3、解析xml,返回document org.w3c.dom.Document document=docuBuilder.parse("src/person.xml"); //4、得到所有name元素 NodeList nodelist=document.getElementsByTagName("name"); //5、遍历NodeList for (int i= 0;i < nodelist.getLength(); i++) { //获得每一个name元素 Node name1=nodelist.item(i); //得到name元素里的文本 String text=name1.getTextContent(); System.out.println(text); } } /* * 添加节点 * 这里:在第一个P1下面(末尾)添加 <sex>nv</sex> */ public static void addSex() throws ParserConfigurationException, SAXException, IOException, TransformerException { //1、创建解析器工厂 DocumentBuilderFactory builderFactory=DocumentBuilderFactory.newInstance(); //2、用解析器工厂创建解析器 DocumentBuilder docuBuilder=builderFactory.newDocumentBuilder(); //3、解析xml,返回document org.w3c.dom.Document document=docuBuilder.parse("src/person.xml"); //4、得到所有name元素 NodeList nodelist=document.getElementsByTagName("P1"); //获得第一个name元素 Node firstP1=nodelist.item(0); //6、创建sex标签createElement(),创建文本标签 Text text1 =document.createTextNode("nv"); Element sex1=document.createElement("sex"); //7、把文本添加到sex下面 appendChild sex1.appendChild(text1); //8、把sex添加到第一个P1下面 firstP1.appendChild(sex1); //9、回写xml 这一步骤保存好代码 以后直接复制使用,无需记忆 TransformerFactory transformerFactory=TransformerFactory.newInstance(); Transformer transformer=transformerFactory.newTransformer(); transformer.transform(new DOMSource(document), new StreamResult("src/person.xml")); } /* * 修改节点 * 这里:以修改第一个sex为男,为例子 */ public static void modifyNodeText() throws ParserConfigurationException, SAXException, IOException, TransformerException { //1、创建解析器工厂 DocumentBuilderFactory builderFactory=DocumentBuilderFactory.newInstance(); //2、用解析器工厂创建解析器 DocumentBuilder docuBuilder=builderFactory.newDocumentBuilder(); //3、解析xml,返回document org.w3c.dom.Document document=docuBuilder.parse("src/person.xml"); //4、得到所有sex元素 NodeList nodelist=document.getElementsByTagName("sex"); //5、获得第一个sex元素 Node sex=nodelist.item(0); //6、修改sex的内容 sex.setTextContent("nan"); //7、回写xml TransformerFactory transformerFactory=TransformerFactory.newInstance(); Transformer transformer=transformerFactory.newTransformer(); transformer.transform(new DOMSource(document), new StreamResult("src/person.xml")); } /* * 删除节点 * 这里:删除<sex>nv</sex> */ public static void delSex() throws ParserConfigurationException, SAXException, IOException, TransformerException { //1、创建解析器工厂 DocumentBuilderFactory builderFactory=DocumentBuilderFactory.newInstance(); //2、用解析器工厂创建解析器 DocumentBuilder docuBuilder=builderFactory.newDocumentBuilder(); //3、解析xml,返回document org.w3c.dom.Document document=docuBuilder.parse("src/person.xml"); //4、得到所有sex元素 NodeList nodelist=document.getElementsByTagName("sex"); //5、获得第一个sex元素 Node sex=nodelist.item(0); //6、获取sex的父节点 Node father=sex.getParentNode(); //7、使用removeChild方法删除节点 father.removeChild(sex); //8、回写xml TransformerFactory transformerFactory=TransformerFactory.newInstance(); Transformer transformer=transformerFactory.newTransformer(); transformer.transform(new DOMSource(document), new StreamResult("src/person.xml")); } /* * 遍历所有节点,把所有元素名称打印出来 */ public static void listElement() throws SAXException, IOException, ParserConfigurationException { //1、创建解析器工厂 DocumentBuilderFactory builderFactory=DocumentBuilderFactory.newInstance(); //2、用解析器工厂创建解析器 DocumentBuilder docuBuilder=builderFactory.newDocumentBuilder(); //3、解析xml,返回document org.w3c.dom.Document document=docuBuilder.parse("src/person.xml"); //4、递归遍历每一个节点 list(document,0); } private static void list(Node node,int n) { if (node.getNodeType()==Node.ELEMENT_NODE)//只输出元素名 { for(int i=0;i<n-1;i++)//输出层次空格 System.out.print(" "); System.out.println(node.getNodeName()); } NodeList nodeList=node.getChildNodes(); for(int i= 0;i<nodeList.getLength();i++) { list(nodeList.item(i),n+1); } }}
1 0
- 使用jaxp对XML文件进行dom解析
- 【XML解析】使用Jaxp对XML进行DOM解析
- 使用JAXP对xml文档进行Dom解析
- 使用JAXP对xml文档进行Dom解析
- 使用JAXP对XML文档进行DOM解析
- JAXP对xml文档进行DOM解析
- jaxp对xml文档进行dom解析
- xml--解析02--jaxp对xml进行dom解析
- xml解析技术概述和使用Jaxp对xml文档进行dom解析
- XML解析技术和使用Jaxp对xml文档进行dom解析
- Java对XML文档进行解析(JAXP-DOM解析)
- 用“XML解析开发包Jaxp”对XML文件进行Dom方式的CRUD操作
- xml学习笔记(4)使用Jaxp对xml文档进行dom解析
- 对XML文档进行JAXP的DOM解析
- 利用JAXP的DOM方式对xml文档进行解析
- JAXP对XML文档进行DOM解析实现增删改
- 使用JAXP进行DOM解析
- 使用jaxp进行dom解析
- 浅谈KMP
- Python -- 5. 用户输入和while 循环
- 4475: [Jsoi2015]子集选取
- ps 与 top 对于cpu使用率不一致的问题
- NZT基本介绍
- 使用jaxp对XML文件进行dom解析
- win32api之添加水印
- AfxBeginThread如何安全退出
- [LeetCode]135. Candy
- HDU 2031进制转换
- leetcode520
- MSP430F1612 基础时钟模块(Basic Clock Module)
- C++ --STL-- Map用法介绍
- simple-spa 一个简单的单页应用实例