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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Darryl_Tang

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值