美文网首页
JSON与XML解析

JSON与XML解析

作者: 鱼落于天 | 来源:发表于2020-11-16 00:45 被阅读0次

    JSON与XML解析

    json 待整理


    xml

    基础常识

    • 原样输出内容: <![CDATA[ 内容内容 ]]>
    • 约束: dtd 和 schema (文件以 .xsd 结尾)
    • 引入css样式
    • xml版本 version

    一 解析方式

    1. DOM: 一次性将文本加载进内存,形成dom树

    • 优点: 操作方便,对文档可以进行CURD操作
    • 缺点: 占内存

    2. SAX: 逐行读取,基于事件驱动,读取一行之后释放一行

    • 优点: 内存占用小
    • 缺点: 只能读取, 不能修改

    二 xml解析器:

    1. JAXP

    • 官方提供,但操作复杂

    2. DOM4J

    • 很优秀的解析器

    3. pull Android 内置解析器, SAX方式

    4. jsoup

    • java的HTML解析器, 可以通过DOM, CSS和类似JQuery的方式操作
    • Jsoup 工具类,主要获取Document
    • Document 文档对象,代表树
    • Elements Element对象集合
    • Element 元素对象
    • Node 节点对象
    jsoupUml.jpg

    Xpath

    // 测试代码
    import cn.wanghaomiao.xpath.exception.XpathSyntaxErrorException;
    import cn.wanghaomiao.xpath.model.JXDocument;
    import cn.wanghaomiao.xpath.model.JXNode;
    import org.jsoup.Jsoup;
    import org.jsoup.nodes.Document;
    import org.jsoup.nodes.Element;
    import org.jsoup.select.Elements;
    import java.io.File;
    import java.io.FileInputStream;
    import java.io.IOException;
    import java.io.InputStream;
    import java.util.List;
    
    /**
     * xml 解析
     */
    public class JsoupTest {
    
        public static void main(String[] args) throws IOException, XpathSyntaxErrorException {
            //   获取document对象
            String path = JsoupTest.class.getClassLoader().getResource("c3p0-config.xml").getPath();
            System.out.println("xml文件: " + path);
            Document document = getDocument(path);
            Elements elements = documentTest(document);
            elementTest(elements);
    
            System.out.println("Xpath 方式获取元素集合");
            JXDocument jxDocument = new JXDocument(document);
            List<JXNode> jxNodes  = jxDocument.selN("//property");
            for (JXNode jxNode : jxNodes) {
                // 可以转换为元素对象
                System.out.println(jxNode.getElement());
            }
        }
    
        /**
         * Jsoup 获取Document对象
         *
         * @param path xml 路径
         *
         * @return Document 文档操作对象
         *
         * @throws IOException
         */
        private static Document getDocument(String path) throws IOException {
            // 1. 根据文件流获取document
            File     file     = new File(path);
            Document document = Jsoup.parse(file, "UTF-8");
    
            // 根据字符串直接获取
            InputStream   in    = new FileInputStream(path);
            byte[]        bytes = new byte[1024];
            StringBuilder sb    = new StringBuilder();
            int           len   = 0;
            while ((len = in.read(bytes)) != -1) {
                sb.append(new String(bytes, 0, len));
            }
    
            Document document2 = Jsoup.parse(sb.toString());
            in.close();
    
            return document;
        }
    
        /**
         * document 对象操作方法
         * 类似JavaScript dom节点操作对象的方法
         *
         * @param document 文档对象
         *
         * @return Elements
         */
        private static Elements documentTest(Document document) {
            // 这三个方法是Document从Element对象继承来的, 从当前节点开始搜索
            System.out.println("根据标签名称获取点对应Element集合");
            Elements property = document.getElementsByTag("property");
            for (Element element : property) {
                System.out.println(element);
            }
    
            System.out.println("根据属性名称获取对应Element集合");
            Elements name = document.getElementsByAttribute("name");
            for (Element element : name) {
                System.out.println(element);
            }
    
            System.out.println("根据属性名和属性值获取对应Element集合");
            Elements name1 = document.getElementsByAttributeValue("name", "user");
            for (Element element : name1) {
                System.out.println(element);
            }
    
            System.out.println("selector 选择器选择 类似 Css选择器");
            Elements select = document.select("property[name=\"user\"]");
    
            return name;
        }
    
        /**
         * 元素对象集合
         *
         * @param elements 元素对象集合
         */
        private static void elementTest(Elements elements) {
            System.out.println("elementTest");
            for (Element element : elements) {
                System.out.println(" 1. 获取属性值");
                System.out.println(element.attr("name"));
                System.out.println("text 类似 text");
                System.out.println(element.text());
                System.out.println("html 类似 innerHtml");
                System.out.println(element.html());
            }
        }
    }
    
    

    相关文章

      网友评论

          本文标题:JSON与XML解析

          本文链接:https://www.haomeiwen.com/subject/mxxabktx.html