xml的解析一

来源:互联网 发布:java 迭代器 从头 编辑:程序博客网 时间:2024/05/22 03:11

jaxp是javase的一部分

jaxp解析器在jdk的javax.xml.parsers包里面

四个类:分别是针对dom和sax解析使用的类

dom:

DocumentBuilder  : 解析器类

这个类是一个抽象类,不能new,此类的实例可以从 DocumentBuilderFactory.newDocumentBuilder() 方法获取

一个方法,可以解析xml  parse("xml路径") 返回是 Document 整个文档

返回的document是一个接口,父节点是Node,如果在document里面找不到想要的方法,到Node里面去找

在document里面方法 

  • getElementsByTagName(String tagname),这个方法可以得到标签, 返回集合 NodeList
  • createElement(String tagName),创建标签
  • createTextNode(String data) ,创建文本
  • appendChild(Node newChild),把文本添加到标签下面
  • removeChild(Node oldChild),删除节点
  • getParentNode() ,获取父节点
  • NodeList list getLength() 得到集合的长度 item(int index)下标取到具体的值
  • getTextContent(),得到标签里面的内容
DocumentBuilderFactory: 解析器工厂,这个类也是一个抽象类,不能new,newInstance() 获取 DocumentBuilderFactory 的实例。
案例:
<?xml version="1.0" encoding="utf-8" standalone="no"?><person><p1><name>张三</name><age>20</age></p1><p1><name>李四</name><age>30</age></p1></person>
package com.java.xml;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.Document;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;public class TestJaxp {public static void main(String[] args) throws ParserConfigurationException, SAXException, IOException, TransformerException {//selectAll();//selectSingle();//addSex();//modifySex();//deleteSex();listElements();}/** * 查询所有name元素的值 * @throws ParserConfigurationException  * @throws IOException  * @throws SAXException  */public static void selectAll() throws ParserConfigurationException, SAXException, IOException {/* * 1.创建解析器工厂 * 2.根据解析器工厂创建解析器 * 3.解析xml返回document * 4.得到所有的name元素 * 5.返回集合,遍历集合 *///创建解析器工厂DocumentBuilderFactory builderFactory = DocumentBuilderFactory.newInstance();//创建解析器DocumentBuilder builder = builderFactory.newDocumentBuilder();//解析xml返回documentDocument document = builder.parse("src/person.xml");//得到name元素NodeList list = document.getElementsByTagName("name");//遍历集合for (int i = 0; i < list.getLength(); i++) {//得到每一个name元素Node name1 = list.item(i);String s = name1.getTextContent();System.out.println(s);}}/** * 查询xml第一个name元素的值 * @throws ParserConfigurationException  * @throws IOException  * @throws SAXException  */public static void selectSingle() throws ParserConfigurationException, SAXException, IOException {/** * 1.创建解析器工厂 * 2.根据解析器工厂创建解析器 * 3.解析xml返回document * 4.得到所有的name元素 * 5.使用返回集合里面的方法item,根据下标获取具体的元素 * 6.得到具体的值,使用getTextContent()方法 *///创建解析器工厂DocumentBuilderFactory builderFactory = DocumentBuilderFactory.newInstance();//创建解析器DocumentBuilder builder = builderFactory.newDocumentBuilder();//解析xml得到documentDocument document = builder.parse("src/person.xml");//得到所有的name元素NodeList list = document.getElementsByTagName("name");//使用下标得到第一个name元素Node name1 = list.item(0);//取得name元素的值String s = name1.getTextContent();System.out.println(s);}/** * 在第一个p1下面添加<sex>nv</sex> * @throws ParserConfigurationException  * @throws IOException  * @throws SAXException  * @throws TransformerException  */public static void addSex() throws ParserConfigurationException, SAXException, IOException, TransformerException {/* * 1.创建解析器工厂 * 2.根据解析器工厂创建解析器 * 3.解析xml得到document * 4.得到第一个p1,得到所有的p1使用item方法下标得到 * 5.创建sex标签,createElement * 6.创建文本 createTextNode * 7.把文本添加到sex下面 appendChild * 8.把sex添加到第一个p1下面 * 9.回写xml *///创建解析器工厂DocumentBuilderFactory builderFactory = DocumentBuilderFactory.newInstance();//创建解析器DocumentBuilder builder = builderFactory.newDocumentBuilder();//解析xml得到documentDocument document = builder.parse("src/person.xml");//得到所有的p1NodeList list = document.getElementsByTagName("p1");//得到第一个p1Node p1 = list.item(0);//创建标签Element sex = document.createElement("sex");//创建文本Text text = document.createTextNode("nv");//把文本添加到sex下sex.appendChild(text);//把sex添加到p1下p1.appendChild(sex);//回写xmlTransformerFactory transformerFactory = TransformerFactory.newInstance();Transformer transformer = transformerFactory.newTransformer();transformer.transform(new DOMSource(document), new StreamResult("src/person.xml"));}/** * 修改第一个p1下面的sex内容是nan * @throws ParserConfigurationException  * @throws IOException  * @throws SAXException  * @throws TransformerException  */public static void modifySex() throws ParserConfigurationException, SAXException, IOException, TransformerException {/* * 1.创建解析器工厂 * 2.创建解析器 * 3.解析xml得到document * 4.得到sex,使用item方法 * 5.修改sex中的值,使用setTextContent方法 * 6.回写xml *///创建解析器工厂DocumentBuilderFactory builderFactory = DocumentBuilderFactory.newInstance();//创建解析器DocumentBuilder builder = builderFactory.newDocumentBuilder();//解析xml得到documentDocument document = builder.parse("src/person.xml");//得到sexNode sex = document.getElementsByTagName("sex").item(0);//修改sex中的值sex.setTextContent("男");//回写xmlTransformerFactory transformerFactory = TransformerFactory.newInstance();Transformer transformer = transformerFactory.newTransformer();transformer.transform(new DOMSource(document), new StreamResult("src/person.xml"));}/** * 删除<sex></sex>节点 * @throws ParserConfigurationException  * @throws IOException  * @throws SAXException  * @throws TransformerException  */public static void deleteSex() throws ParserConfigurationException, SAXException, IOException, TransformerException {/* * 1.创建解析器工厂 * 2.根据解析器工厂创建解析器 * 3.解析xml得到document * 4.获取sex元素 * 5.获取sex的父节点 * 6.删除使用父节点的removeChild方法 * 7.回写xml *///创建解析器工厂DocumentBuilderFactory builderFactory = DocumentBuilderFactory.newInstance();//创建解析器DocumentBuilder builder = builderFactory.newDocumentBuilder();//解析xml得到documentDocument document = builder.parse("src/person.xml");//获取sex元素Node sex = document.getElementsByTagName("sex").item(0);//得到sex的父节点Node p1 = sex.getParentNode();//删除操作p1.removeChild(sex);//回写xmlTransformerFactory transformerFactory = TransformerFactory.newInstance();Transformer transformer = transformerFactory.newTransformer();transformer.transform(new DOMSource(document), new StreamResult("src/person.xml"));}/** * 遍历节点,把所有元素名称打印出来 * @throws ParserConfigurationException  * @throws IOException  * @throws SAXException  */public static void listElements() throws ParserConfigurationException, SAXException, IOException {/* * 1.创建解析器工厂 * 2.根据解析器工厂创建解析器 * 3.解析xml得到document * ======使用递归======= * 4.得到根节点 * 5.得到根节点子节点 * 6.得到根节点子节点的子节点 *///创建解析器工厂DocumentBuilderFactory builderFactory = DocumentBuilderFactory.newInstance();//创建解析器DocumentBuilder builder = builderFactory.newDocumentBuilder();//解析xml得到documentDocument document = builder.parse("src/person.xml");//编写一个方法实现遍历操作list(document);}/** * 递归遍历的方法 * @param document */public static void list(Node node) {//判断是元素类型才打印if(node.getNodeType() == Node.ELEMENT_NODE) {System.out.println(node.getNodeName());}//得到一层子节点NodeList list = node.getChildNodes();//遍历listfor (int i = 0; i < list.getLength(); i++) {//得到每一个节点Node node1 = list.item(i);//继续得到node1的子节点list(node1);}}}



0 0
原创粉丝点击