zoukankan      html  css  js  c++  java
  • Java的xml解析器

    1、jaxp

    是javase的一部分,就是jdk中的一部分,javax.xml.parsers包

    1.1、dom方式解析xml
        DocumentBuilder
        DocumentBuilderFactory

    package demo;
    
    import org.w3c.dom.*;
    import org.xml.sax.SAXException;
    
    import javax.xml.parsers.DocumentBuilder;
    import javax.xml.parsers.DocumentBuilderFactory;
    import javax.xml.parsers.ParserConfigurationException;
    import javax.xml.transform.Transformer;
    import javax.xml.transform.TransformerFactory;
    import javax.xml.transform.dom.DOMSource;
    import javax.xml.transform.stream.StreamResult;
    import java.io.IOException;
    
    public class AppDom {
        public static void main(String[] args) throws Exception {
            queryList();
            //insertTag();
            //updateTag();
            //deleteTag();
        }
    
    
        public static void queryList() throws ParserConfigurationException, IOException, SAXException {
            //1、创建解析器工厂
            DocumentBuilderFactory builderFactory = DocumentBuilderFactory.newInstance();
    
            //2、创建解析器
            DocumentBuilder builder = builderFactory.newDocumentBuilder();
    
            //3、解析xml返回document
            Document doc = builder.parse("./src/main/resources/persons.xml");
    
            //4、递归遍历
            RecursiveNode(doc);
        }
    
        private static void RecursiveNode(Node node) {
            //判断是元素类型才打印
            if (node.getNodeType()==Node.ELEMENT_NODE){
                System.out.println(node.getNodeName());
            }
    
            //得到当前节点的子节点集合
            NodeList nodeList = node.getChildNodes();
    
            //遍历
            for (int i= 0;i<nodeList.getLength();i++){
                RecursiveNode(nodeList.item(i));
            }
        }
    
        public static void insertTag() throws Exception{
            //1、创建解析器工厂
            DocumentBuilderFactory builderFactory = DocumentBuilderFactory.newInstance();
            //2、创建解析器
            DocumentBuilder builder = builderFactory.newDocumentBuilder();
            //3、解析xml,返回document
            Document doc = builder.parse("./src/main/resources/persons.xml");
            //4、得到第一个person标签
            Node person = doc.getElementsByTagName("person").item(0);
            //5、创建sex标签 createElement
            Element sex = doc.createElement("sex");
            //6、创建文本 createTextNode
            Text text = doc.createTextNode("男");
            //7、把文本添加到sex标签下面 appendChild
            sex.appendChild(text);
            //8、把sex标签添加到第一个person下面
            person.appendChild(sex);
            //9、回写
            TransformerFactory transformerFactory = TransformerFactory.newInstance();
            Transformer transformer = transformerFactory.newTransformer();
            transformer.transform(new DOMSource(doc),new StreamResult("./src/main/resources/persons.xml"));
        }
    
        private static void updateTag() throws Exception {
            //1、创建解析器工厂
            DocumentBuilderFactory builderFactory = DocumentBuilderFactory.newInstance();
            //2、创建解析器
            DocumentBuilder builder = builderFactory.newDocumentBuilder();
            //3、解析xml,返回document
            Document doc = builder.parse("./src/main/resources/persons.xml");
            //4、得到第一个sex标签
            Node sex = doc.getElementsByTagName("sex").item(0);
            //5、修改sex标签 setTextContext()
            sex.setTextContent("女");
            //6、回写
            TransformerFactory transformerFactory = TransformerFactory.newInstance();
            Transformer transformer = transformerFactory.newTransformer();
            transformer.transform(new DOMSource(doc),new StreamResult("./src/main/resources/persons.xml"));
        }
    
        public static void deleteTag() throws Exception {
            //1、创建解析器工厂
            DocumentBuilderFactory builderFactory = DocumentBuilderFactory.newInstance();
            //2、创建解析器
            DocumentBuilder builder = builderFactory.newDocumentBuilder();
            //3、解析xml,返回document
            Document doc = builder.parse("./src/main/resources/persons.xml");
            //4、得到第一个sex标签
            Node sex = doc.getElementsByTagName("sex").item(0);
            //5、获取sex的父节点
            Node person = sex.getParentNode();
            //6、使用父节点删除 removeChild()
            person.removeChild(sex);
            //7、回写
            TransformerFactory transformerFactory = TransformerFactory.newInstance();
            Transformer transformer = transformerFactory.newTransformer();
            transformer.transform(new DOMSource(doc),new StreamResult("./src/main/resources/persons.xml"));
        }
    }

     1.2、sax方式解析xml

        SAXParser
        SAXParserFactory

    package demo;
    
    import org.xml.sax.Attributes;
    import org.xml.sax.SAXException;
    import org.xml.sax.helpers.DefaultHandler;
    
    import javax.xml.parsers.SAXParser;
    import javax.xml.parsers.SAXParserFactory;
    
    public class AppSax {
        public static void main(String[] args) throws Exception {
            /*
             *  1、创建解析器工厂
             *  2、创建解析器
             *  3、执行parse()
             *  4、继承DefaultHandler,重写三个方法
             *  5、
             */
            //1、创建解析器工厂
            SAXParserFactory factory = SAXParserFactory.newInstance();
            //2、创建解析器
            SAXParser parser =factory.newSAXParser();
            //3、执行parse()
            parser.parse("./src/main/resources/book.xml",new PrintNameHandler());
        }
    }
    
    /**
     * 打印出所有name标签的值
     */
    class PrintNameHandler extends DefaultHandler{
        boolean flag = false;
        @Override
        public void startElement(String uri, String localName, String qName, Attributes attributes) throws SAXException {
            if ("name".equals(qName)){
                flag = true;
            }
        }
    
        @Override
        public void characters(char[] ch, int start, int length) throws SAXException {
            if (flag==true){
                System.out.println(new String(ch,start,length));
            }
        }
    
        @Override
        public void endElement(String uri, String localName, String qName) throws SAXException {
            if ("name".equals(qName)){
                flag = false;
            }
        }
    }
    
    /**
     * 打印xml处理器
     */
    class PrintXMLHandler extends DefaultHandler {
        @Override
        public void startElement(String uri, String localName, String qName, Attributes attributes) throws SAXException {
            System.out.print("<"+qName+">");
        }
    
        @Override
        public void characters(char[] ch, int start, int length) throws SAXException {
            System.out.print(new String(ch,start,length));
        }
    
        @Override
        public void endElement(String uri, String localName, String qName) throws SAXException {
            System.out.print("</"+qName+">");
        }
    }

    2、dom4j

    2.1、sax方式

  • 相关阅读:
    多环境
    Date的after()与before()方法的使用
    Centos6.8 yum报错及修复YumRepo Error: All mirror URLs are not using ftp, http[s] or file. Eg. Invalid
    JSON格式数据解析看这一个就足够了
    widnows下lua开发环境luadist LuaRocks搭建
    树的相关定义及遍历
    win10 启动redis服务的bat
    PageHelper分页失效的可能原因之一
    el-table多选表头复选框不对齐
    好用的软件推荐
  • 原文地址:https://www.cnblogs.com/hsiaochinchin/p/14013342.html
Copyright © 2011-2022 走看看