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);

Java基础——XML复习的更多相关文章

  1. JAVA基础部分复习(一、8中基础类型,以及String相关内容)

    以下是关于java中8种基本类型的介绍说明: package cn.review.day01; /** * java基础复习,8种数据类型 * (byte,short,long,int,double, ...

  2. JAVA基础-XML的解析

    一.XML的概述 XML的全名为可扩展标记语言(Extensible Markup Language),XML的作用为:1.传输,2.存取数据,3.软件的配置文件.传输现在都用更轻量的Json,而存储 ...

  3. JAVA基础部分复习(七、JAVA枚举类型使用)

    /** * java中的枚举 * 枚举(enum),是指一个经过排序的.被打包成一个单一实体的项列表.一个枚举的实例可以使用枚举项列表中任意单一项的值. * 枚举在各个语言当中都有着广泛的应用,通常用 ...

  4. Java基础再复习(继承、多态、方法内部类**、HashMap用法**、参数传递**)

    ###继承: package com.shiyan; public class Animal { public int legNum; //动物四肢的数量 //类方法 public void bark ...

  5. JAVA基础部分复习(六、常用关键字说明)

    /** * JAVA中常用关键字复习 * final * finalize * finally * * @author dyq * */ public class KeyWordReview exte ...

  6. JAVA基础部分复习(二、集合类型)

    对于这些常用的集合,建议还是需要先了解一下底层实现原理,这样在不同的使用场景下才能选择更好的方案. Set介绍以及对比,常用方法: package cn.review.day02; import ja ...

  7. Java基础知识复习(二)

    Java 重写(Override)与重载(Overload) 重写 是子类对父类的允许访问的方法的实现过程进行重新编写,返回值和形参都不能改变,属于编译时多态.即外壳不变,核心重写! 重写的好处在于子 ...

  8. java基础 xml 使用dom4j解析 xml文件 servlet根据pattern 找到class

    package com.swift.kaoshi; import java.io.File; import java.util.List; import java.util.Scanner; impo ...

  9. JAVA基础知识复习小结

    集合 Set集合 Set集合的基本特征是元素不允许重复.HashSet不保存元素顺序,LinkedHashSet用链表保持元素的插入顺序,TreeSet可定制排序规则. HashSet的底层是用Has ...

随机推荐

  1. Hashtable元素的删除

    2中方法 Remove(); Clear(); static void Main(string[] args) { Hashtable ht = new Hashtable(); ht.Add(1,& ...

  2. 人民币金额大小写Js转换

    /** * 数字转中文 * @param dValue * @returns */ function chineseNumber(dValue) { var maxDec = 2; // 验证输入金额 ...

  3. 学习安卓开发过程中遇到关于R.Java文件的问题

    在学习安卓开发过程时,遇到R.java生成问题,总结几个方法解决. 1.首先必须做的就是检查代码的正确性,存在错误的代码,不编译生成R.java 2.右键点项目,选择 Android Tools -& ...

  4. C# 实现OrderBy按多个字段排序

    //倒序 list.OrderByDescending(i => i.a).ThenByDescending(i => i.b); //顺序 list.OrderBy(i => i. ...

  5. vs.net打包(自动检测环境并安装.net framwork)

    vs.net打包程序或者制作安装程序时自动检测环境并安装.netframwork的设置方法之前我看过文档也做过,但是过一段时间又忘了,现在终于又找到方法了,还是把这个方法写下来吧,方便自己也方便大家将 ...

  6. Redis简介及持久化

    Redis是一个key-value数据库,他不仅性能强劲,而且还具有复制特性以及为解决问题而生的独一无二的数据模型.可用于缓存.消息队列.发布.订阅消息.商品列表和评论列表等场景.Redis提供了5种 ...

  7. etcd单机集群

    etcd在单机部署集群,可以先弄清楚配置文件参数的意思.起3个集成监听不同的端口号 1. 启动 在/etc/soft/etcd/node1文件夹中,创建脚本start1.sh etcd --name ...

  8. 《Hadoop权威指南》读书笔记1

    <Hadoop权威指南>读书笔记 Day1 第一章 1.MapReduce适合一次写入.多次读取数据的应用,关系型数据库则更适合持续更新的数据集. 2.MapReduce是一种线性的可伸缩 ...

  9. 两个command的疑惑

    1.在cqrs模式中有command和query command  命令  没有返回值,但会更改对象的状态 query 查询  有返回值  但不会改变用户的状态,对下同而言没有副作用 2.在今天的实际 ...

  10. scss-变量分隔符

    scss的变量名可以与css中的属性名和选择器名称相同,包括中划线和下划线. 在使用中划线还是下划线来进行变量分隔完全根据个人喜好. scss完全兼容这两种写法,也就是说scss认为中划线和下划线是完 ...