XML可扩展的标记性语言

XML可扩展的标记性语言,第1张

文章目录
  • XML
    • 1.简介
    • 2.语法
    • 3.XML的各种解析技术
    • 4.Dom4j解析技术

XML 1.简介

是可扩展的标记性语言 (可扩展:直接定义标签)

xml主要作用:

  1. 用来保存数据 ,而且这些数据具有自我描述性

  2. 还可以作为项目或模板的的配置文件

  3. 作为网络传输数据的格式 (这个用的不多了,现在以JSON为主)


2.语法
  1. 文档声明

  2. 元素(标签)

    指的是从(且包括)开始标签直到(且包括)结束标签的部分,和html差不多。标签命名可有下划线。

  3. xml属性,提供有关元素的额外信息,属性值必须被引号包围

  4. xml注释,和html一样

  5. 文本区域 (CDATA区)

    CDATA语法可以告诉解析器CDATA里面的内容只是存文本,不需要xml语法解析。

    >我是纯文本 ]]>
    

xml对大小写敏感,标签必须闭合,xml文档必须有根元素(根元素:没有父标签的顶级元素,而且是一个才行)





<books>
    <book sn="Sn1231314">
        <name>时间简史name>
        <author>霍金author>
        <price>75price>
    book>

    <book sn="Sn1215151">
        <name>活着name>
        <author>余华author>
        <price>50price>
    book>
books>

3.XML的各种解析技术

⭐⭐⭐

各种解析技术的介绍:不管是html还是xml文件它们都是标记性文档,都可以使用w3c组织指定的dom技术来解析,document对象表示整个文档,不仅是htmlxml也是。

早期JDK为我们提供了两种解析技术:DOM和SAX (现在都已经过时了)

DOM:根据W3C指定的规则,几乎所有的编程语言都对这个解析技术做了实现。

SAX:在JDK5对dom技术进行了升级即SAX(Simple API for XML),SAX解析,它跟W3C制定的规则不太一样,它是类似事件机制通过回调告诉用户当前正在解析的内容,它是一行一行的读取xml文件进行解析的,不会创建大量的dom对象,所以在内存上性能上都优于DOM解析技术。


第三方的解析:

  1. jdom : 在dom/sax基础上进行了封装

  2. dom4j :又对jdom进行了封装 (下面讲)⭐

  3. pull : 主要用于安卓手机开发,是在跟sax非常类似都是事件机制解析xml文件


4.Dom4j解析技术

Dom4j解析技术不是sun/oracle公司,属于第三方的技术,所以要去dom4j官网下载jar包

官网:dom4j.github.io

在Java中解析上面的例子:

  1. 创建SAX输入流,读取xml文件,产生document对象
  2. 创建document对象
  3. 通过document对象获取跟元素
  4. 通过根元素获取book标签对象,遍历处理每个book标签转化为Book类
private static void test01() {
    // 1.创建SAX输入流,读取xml文件,产生document对象
    SAXReader saxReader = new SAXReader();
    try {
        // 2.创建document对象
        Document document = saxReader.read("xml/books.xml"); 
        //Junit测试中,相对路径的从当前模板为开始算

        // 3.通过document对象获取跟元素
        Element rootElement = document.getRootElement();

        // 4.通过根元素获取book标签对象,遍历处理每个book标签转化为Book类
        List<Element> books = rootElement.elements("book");  
        // element和elements都是通过标签名查找子元素
        for (Element book : books) {
            //System.out.println(book.asXML()); // asXML()把标签对象转化为标签字符串
            Element name = book.element("name");
            String nameText = name.getText(); //获取标签中的文本内容

            String priceText = book.elementText("price"); //直接获取标签中的文本内容
            String authorText = book.elementText("author");

            //获取属性
            String snVal = book.attributeValue("sn");

            System.out.println(new Book(snVal, nameText, 
            	authorText, new BigDecimal(priceText))); //输出Book类对象
        }

    } catch (DocumentException e) {
        e.printStackTrace();
    }
}

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/732794.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-04-27
下一篇 2022-04-27

发表评论

登录后才能评论

评论列表(0条)

保存