• Java基础——XML复习


    XML
                    SGML : 标准通用置标语言    Standard Generailzed    Markup Language
    XML        
                    HTML : 超文本置标语言    HyperText Markup Language
    XML : 可扩展标记语言
    标记 : 指计算机所能理解的信息符号
    XML 的优点 : 
            ① 可扩展的标记
            ② 数据共享和重用
            ③ XML 遵循严格的语法要求
            ④ XML 便于不同系统之间信息的传输
            ⑤ 数据存储格式不受显示格式的制约
            ⑥ 包含语义的文档格式
            ⑦ 对面向对象(OOP)的支持 DOM
            ⑧ 内容与形式的分离
            ⑨ 具有较好的保值性
    缺点:
            ① 语义表达能力上略显不足
            ② XML 的有些技术尚未形成统一的标准
            ③ 应用程序浏览器对XML 的支持也是有限的
    基本格式 :<标记名></标记名>
        字符: >    --->    &gt;                    <    --->    &lt;                &    --->    &amp;
                    "    --->    &quot;                ,      --->    &apos;          空格    --->    &nbsp;
     
    XML 和 HTML 的主要区别:
        XML 是被设计用来描述数据的,重点是:什么是数据,如何存放数据
        HTML 是被设计用来显示数据的,重点是:显示数据以及如何更好地显示数据
     
    XML 声明:
        <?xml version = "XML的版本号" encoding = "采用的编码标准" standalone = "no"?>
    处理指令:
        <?处理指令名 处理指令信息>
     
    DOM解析
    DOM:是将xml文件全部载入,组装成一颗dom树,然后通过节点以及节点之间的关系来解析xml文件
                或    将xml以树结构的方式一次性加载进内存,易用,修改方便,但是更占内存。不适应于大文件,一般情况下用它即可应付大多数应用。
    DOM 是用与平台和语言无关的方式表示 XML 文档的官方 W3C 标准。DOM 是以层次结构组织的节点或信息片断的集合
    DOM 解析器需要将整个文档解析一遍,并将解析结果以树型结构保存到内存中( 这棵树被称为DOM 树),然后才把程序
    的控制权交给用户。这导致了DOM 方式不够灵活,需要占用大量的资源。
    DOM xml文件的创建:
        DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();//获取 DocumentBuilderFactory 的新实例。
        DocumentBuilder db = dbf.newDocumentBuilder();//使用当前配置的参数创建一个新的 DocumentBuilder 实例。
        Document doc = db.newDocument();//获取 DOM Document 对象的一个新实例来生成一个 DOM 树。
        Element root = doc.createElement("root");    //创建根结点
        document.appendChild(root);    //追加嵌套        setTextContent()、setAttribute()    加值
        
        TransformerFactory tf = TransformerFactory.newInstance();// 获取 TransformerFactory 的新实例。
        Transformer t = tf.newTransformer();//此抽象类的实例能够将源树转换为结果树。
        t.transform(new DOMSource(root), new StreamResult("xml文件路径"));
    DOM xml文件的读取:
        DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
        DocumentBuilder db = dbf.newDocumentBuilder();
        Document document = db.parse("xml文件路径");
     
        NodeList array = document.getChildNodes();
        for (int i=0;i<array.getLength();i++) {
            Node cla = array.item(i);
            NodeList stus = cla.getChildNodes();
            for (int j=0;j<stus.getLength();j++) {
                Node stu = stus.item(j);
                NamedNodeMap arrs = stu.getAttributes();
                if (stu.getNodeName().equals("student")) { //过滤掉#test
                    for(int k = 0;k<arrs.getLength();k++){
                        Node arr = arrs.item(k);
                        System.out.println(arr.getNodeName()+" "+arr.getNodeValue());
                    }
                }
            }
        }
    Dom4j 解析
         查询:
            SAXReader sr = new SAXReader();
            Document doc = sr.read("xml文件路径");
            List<DefaultElement> list = doc.selectNodes("节点/子节点");
        增加:
            SAXReader sr = new SAXReader();
            Document doc = sr.read("xml文件路径);
            List<DefaultElement> list = doc.selectNodes("节点");
            DefaultElement de = list.get(0);
            Element ele = de.addElement("要增加的节点");
            ele.addAttribute("要增加的属性名","要增加的值");
            ele.addText("增加文本值");
            XMLWriter write = new XMLWrite(new FileOutputStream("xml文件路径"));
            write.write(doc); write.close();
        修改:
            SAXReader saxReader = new SAXReader();
            Document doc = saxReader.read("xml文件路径");
            List<DefaultElement> list = doc.selectNodes("节点");
            DefaultElement de = list.get(0);
            List<Element> list2  = de.elements();
            for (Element e : list2) {
                if (e.attributeValue("属性名").equals("属性值")) {
                    Element eleName = e.element("属性名");
                    eleName.setText("新值");
                }
            }
            XMLWriter write = new XMLWrite(new FileOutputStream("xml文件路径"));
            write.write(doc); write.close();
        删除:
            SAXReader saxReader = new SAXReader();
            Document doc = saxReader.read("xml文件路径");
            List<DefaultElement> list = doc.selectNodes("节点");
            DefaultElement de = list.get(0);
            List<Element> list2  = de.elements();
            for (Element e : list2) {
                if (e.attributeValue("属性名").equals("属性值")) {
                    de.remove(e);
                }
            }
            XMLWriter write = new XMLWrite(new FileOutputStream("xml文件路径"));
            write.write(doc); write.close();
     
    将文档写入XML文件:
        ① 文档中全英文,不设置编码,直接写入
            XMLWriter write = new XMLWrite(new FileOutputStream("xml文件路径"));
            write.write(document); write.close();
        ② 文档中含有中文,设置编码格式再写入
            OutputFormat format = OutputFormat.createPrettyPrint();
            format.setEncoding("指定编码格式");
            XMLWriter write = new XMLWrite(new FileOutputStream("xml文件路径"));
            write.write(document); write.close();
     
    创建XML文件 :
        String fileName = "路径";
        Document doc = DocumentHelper.createDocument();
        Element root = doc.addElement("根节点"); 
        XMLWriter writer = new XMLWriter(new File(fileName));
        writer.write(doc);
        writer.close();
     
    将字符串转化为 XML 文件 : 
        String text = "<cla><stu> 属性 </stu></cla>";
        Document doc = DocumentHelper.parseText(text);
  • 相关阅读:
    快手2019秋招--魔法深渊
    mutiset的简单介绍转载
    端午遥想
    UVA 11291
    Amicable numbers -- Javascript 实现
    iOS Dev (54) 键盘弹出后收起时View随之移动
    webapp设置适应pc和手机的页面宽高以及布局层叠图片文字
    shu_1180 回文数(一)
    开发微信公众平台--新建新浪云sae部署server
    C++
  • 原文地址:https://www.cnblogs.com/798911215-Darryl-Tang/p/9418842.html
Copyright © 2020-2023  润新知