栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

XML简介

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

XML简介

文章目录
  • XML
    • XML的创建和语法规则
    • 文档约束
      • DTD
      • schema
  • XML解析技术
    • Dom4J解析XML文件
  • XML检索技术:XPath
  • 设计模式:工厂模式
  • 设计模式:装饰模式

我们在某些业务场景下,存储数据或者传输数据给别人的时候,数据需要满足一定的规范进行组织(XML)。把XML文件中数据提取出来是(XML解析技术)。方便的在XML文件中进行数据的检索用(XPath)。

XML

可扩展标记语言的缩写,它是一种数据表示形式,可以描述复杂的数据结构,常用于传输和存储数据。
(1)标签名可以随便取
(2)允许标签嵌套
(3)纯文本,默认使用UTF-8编码
(4)如果把XML内容存为文件,那它就是一个XML文件,后缀名.xml
(5)XML内容当成消息进行网络传输或者作为配置文件用于存储系统的信息

XML的创建和语法规则

第一行必为文档声明
(1)标签由一堆尖括号和合法标识符组成,必须只有一个根标签。
(2)标签必须成对出现,有出现,有结束。
(3)特殊的标签可以不重复,但是必须有结束标记。
(4)标签中可以定义属性,属性和标签名空格隔开,属性值必须用引号括起来。


(5)特殊字符:
XML文件中可以存在CDATA区: ,在这里面可以不用写特殊字符的符号。

文档约束

限定xml文件中的标签和属性应该怎么写,以此强制约束程序员必须按照文档约束的规定编写xml文件。

DTD

步骤:( 1 )在idea中写文件后缀为.dtd
(2)在需要编写的XML文件中导入DTD约束文档。


(3)按照约束的规定编写XML文件的内容。
缺点:不能约束数据类型

schema

①:编写schema约束文档,后缀必须是.xsd.
②:在需要编写的XML文件中导入该schema约束文档.
③:按照约束内容编写XML文件的标签。
XML解析技术

XML的数据作用:存储数据,做配置信息,进行数据传输+最终需要被程序进行读取,解析里面的信息。
DOM常见的解析工具:

Dom4J解析XML文件

public class Dom4JHelloWorldDemo1 {
    @Test
    public void parseXMLData() throws Exception {
        // 1、创建一个Dom4j的解析器对象,代表了整个dom4j框架
        SAXReader saxReader = new SAXReader();

        // 2、把XML文件加载到内存中成为一个Document文档对象
        //Document document = saxReader.read(new File("xml-app\src\Contacts.xml")); // 需要通过模块名去定位
        // Document document = saxReader.read(new FileInputStream("xml-app\src\Contacts.xml"));

        // 注意: 调用class中的getResourceAsStream中的   / .xml
        InputStream is = Dom4JHelloWorldDemo1.class.getResourceAsStream("/Contacts.xml");
        Document document = saxReader.read(is);

        // 3、获取根元素对象
        Element root = document.getRootElement();
        System.out.println(root.getName());
    }
 }

Dom4j解析XML的元素、属性、文本的各种API:

Dom4J的解析思想:得到文档对象Document,从中获取元素对象和内容。

XML检索技术:XPath

如何从XML文件中检索需要的某个信息(如name)?
(1)Dom4j需要进行文件的全部解析,然后再寻找数据。Dom4J用于解析数据,Xpath用于检索数据。
(2)Xpath技术更加适合做信息检索,使用路径表达式来定位XML文档中的元素节点或者属性节点。

/元素/子元素/孙元素
//子元素//孙元素

(3)使用步骤:
(4)路径查找:

绝对路径:/根元素/子元素/孙元素(从根元素开始,一级一级向下寻找,不能跨级)

相对路径:先得到根节点contactList
再采用相对路径获取下一级contact 节点的name子节点并打印信息
./子元素/孙元素 从当前元素开始,一级一级向下查找,不能跨级

全文搜索

XPath:属性查找

public class XPathDemo {
    
    public void parse01() throws Exception {
        // a、创建解析器对象
        SAXReader saxReader = new SAXReader();
        // b、把XML加载成Document文档对象
        Document document =
                saxReader.read(XPathDemo.class.getResourceAsStream("/Contacts2.xml"));
        // c、检索全部的名称
        List nameNodes = document.selectNodes("/contactList/contact/name");
        for (Node nameNode : nameNodes) {
            Element  nameEle = (Element) nameNode;
            System.out.println(nameEle.getTextTrim());
        }
    }

    
    public void parse02() throws Exception {
        // a、创建解析器对象
        SAXReader saxReader = new SAXReader();
        // b、把XML加载成Document文档对象
        Document document =
                saxReader.read(XPathDemo.class.getResourceAsStream("/Contacts2.xml"));
        Element root = document.getRootElement();
        // c、检索全部的名称
        List nameNodes = root.selectNodes("./contact/name");
        for (Node nameNode : nameNodes) {
            Element  nameEle = (Element) nameNode;
            System.out.println(nameEle.getTextTrim());
        }
    }

    
    public void parse03() throws Exception {
        // a、创建解析器对象
        SAXReader saxReader = new SAXReader();
        // b、把XML加载成Document文档对象
        Document document =
                saxReader.read(XPathDemo.class.getResourceAsStream("/Contacts2.xml"));
        // c、检索数据
        //List nameNodes = document.selectNodes("//name");
        // List nameNodes = document.selectNodes("//contact/name");
        List nameNodes = document.selectNodes("//contact//name");
        for (Node nameNode : nameNodes) {
            Element  nameEle = (Element) nameNode;
            System.out.println(nameEle.getTextTrim());
        }
    }

    

    public void parse04() throws Exception {
        // a、创建解析器对象
        SAXReader saxReader = new SAXReader();
        // b、把XML加载成Document文档对象
        Document document =
                saxReader.read(XPathDemo.class.getResourceAsStream("/Contacts2.xml"));
        // c、检索数据
        List nodes = document.selectNodes("//@id");
        for (Node node : nodes) {
            Attribute attr = (Attribute) node;
            System.out.println(attr.getName() + "===>" + attr.getValue());
        }

        // 查询name元素(包含id属性的)
//      Node node = document.selectSingleNode("//name[@id]");
        Node node = document.selectSingleNode("//name[@id=888]");
        Element ele = (Element) node;
        System.out.println(ele.getTextTrim());
    }
}
设计模式:工厂模式

工厂模式(Factory Pattern)是 Java 中最常用的设计模式之一, 这种类型的设计模式属于创建型模式,它提供了一种获取对象的方式。

作用:工厂的方法可以封装对象的创建细节,如:为该对象进行加工和数据注入。可以实现类与类之间的解耦操作(核心思想)。

设计模式:装饰模式

定义:建一个新类,包装原始类,从而在新类中提升原来类的功能。
作用:装饰模式指的是在不改变原类的基础上, 动态地扩展一个类的功能。

InputStream(抽象父类)FileInputStream(实现子类,读写性能较差)BufferedInputStream(实现子类,装饰类,读写性能高)

定义父类。
定义原始类,继承父类,定义功能。
定义装饰类,继承父类,包装原始类,增强功能!!

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/820497.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号