美文网首页
XML基本解析

XML基本解析

作者: _Levi__ | 来源:发表于2019-08-19 21:35 被阅读0次

    XML;

    是什么?

    Extensible Markup Languare 可扩展标记型语言

    为什么要有XML?

    1.HTML的标签是固定的,不可以改变,也不可以进行一个···扩展

    2.HTML语法松散

    作用;

    制作配置文件;如组件类。。。。。

    存储数据;存储少量的数据

    ◆◆◆注;XML不是HTML的升级版,因为应用的领域不一样。

     XML是描写关系型的数据

     HTML是描述页面的数据显示效果

    --------------------------------------------XML和HTML的区别--------------------------------------------------------------------

    XML和HTML的区别;

    A、HTML是将数据和显示的效果混合在一起,描述了数据的显示效果,

    -----而且标签是固定,而且语法松散

    B、XML是将数据和显示的效果是分离的,只是描述了数据之间的关系和存储的格式,

    -----没有描述数据的显示效果,没有一套具体的标签,只是一个规范。

      XML适用金融,科学等有关系型的领域

      XML的重点是;处理数据,和数据结构

    ◆注;引入外部CSS文件,对XML标签进行一个修饰,

    <>xml-stylesheet tyep ="text/css" href = "">

    --------------------------------------------XML的特点--------------------------------------------------------------------

    XML特点;

    1.语法严谨,区分大小写

    2.标签名可以是中文

    3.文件后缀是.xml

    4.换行也是算一个元素

    5.可以自定义标签

    6.id不可以以数字开头

    存储数据的方式;

    * XML 存储关系型的数据

    * properties 存储key,value的数据

    * 文本   什么都可以存储

    * 数据库

    --------------------------------------------XML的语法--------------------------------------------------------------------

    XML语法;

    1.文档声明 Document

    declaration;

     版本             编码集           是否与其他文件关联

       <?xml vaersion =

    "1.0" encoding = "编码集" standalone =

    "no默认" ?>

    2.元素 Element;

    1.自定义标签;建议标签名全部小写,保持与HTML的书写习惯,

    因为出现同名的大小写不便于阅读

    2.成对出现

    3.闭合标签和结束体标签

    4.符合逻辑嵌套

    3.属性 Attribute;

    1.属性名小写,属性也是可以自定义的,

    2.属性值要使用"" 或 '',id不可以以数字开头

    3.多个属性要使用 空格 隔开

    4.可以将属性作为一个子标签,因为XML用途不是用于显示页面的

    4.注释 Comment;

    1.<!-- --> 和HTML一样

    2.注释不可以嵌套

    5.CDATA;

    1.XML的转义字符基本和HTML一致。

    2.如果需要转义的字符太多了则可以使CDATA

    3.CDATA可以将一段字符串原样的输出

    <![CDATA[字符串]]>

    6.处理指令;

    1.处理指令时告知解析引擎是要如何处理文档的。

    2.处理指令必须使用

    <?xml-stylesheet type =

    "text/css" href = "路径">

    ◆注;

        1.XML必须要有一个根节点

        2.XML不会在页面显示

        3.缩进写法适合阅读

    ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■↓↓↓↓↓↓XML—— 文件结构↓↓↓↓↓↓↓↓■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■

    ◆◆◆注; XML文档必须要有一个根节点◆◆◆

    XML文件结构;

    Node

    |--- Element

    |--- Attr

    |--- Comment

    |--- Text

    |--- Document

    ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■↓↓↓↓↓↓XML—— 解析技术↓↓↓↓↓↓↓↓■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■

    xml解析;

    为什么要有?

    因为XML主要是用于存储数据,做配置文件.......

    那么XML的数据的···取出···可以通过解析技术可以实现.....

    而读取XML文件;

    1.IO  ---- 读取出来的数据不是理想的数据。

    2.DOM解析  ----

    DOM4J 是一个开源的解析技术

    3.SAX解析  ----

    SAX 是SUN公司定义的,比较规范,SAX里面也是有使用了DOM4J的技术

    解析技术;

    1.DOM4J  是一个开源组织的

    2.JAXP   是SUN公司定义的

    |-- DOM

    |-- SAX

    ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■↓↓↓↓↓↓DOM—— 解析技术↓↓↓↓↓↓↓↓■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■

    DOM解析;

    特点;1.是一次性装载这个文件到内存中,不利于大文件存取操作,

         2.适合增删改查,因为一次是整个文件加载,无需在到硬盘对文件中的内容一个一个去查找

         3.在内存中是一棵倒挂的树

         4.DOM是解析XML的底层接口之一

         5.是W3C定义的

         6.DOM是一个规范,而DOM4J是一个实现了这个规范的解析技术

    DOM4J;

    1.是DOM解析的一个实现解析技术(如同实现类)

    2.特点和DOM一样,也是一棵倒立的树型形状。

    3.不是W3C定义的,是一个开源团队发布的

    DOM4J;也是一个组件,而这个组件也是需要下载的,

    -----------------------------------------------DOM4J获取XML文件的方式--------------------------------------------------------------------

    ◆◆◆注;注意导包的路径。

    DOM4J获取文件的三种方式;

    1.通过解析器的方法传入一个绝对路径

    a.创建解析器

    ★SAXReader sr = new SAXReader();

    b.调用解析器的read方法获取XML文档,使用文档对象接收

    ★ Document doc = sr.read("绝对路径");

    2.通过解析器的方法传入一个相对路径

    a.创建解析器

    ★SAXReader sr = new SAXReader();

    b.调用解析器的read()方法,获取到XML文档,使用文档对象接收

    ★ Document doc = sr.read("相对路径");

    3.通过类的getResourceAsStream("/文件名")方法

    a.通过运行时类的对象的getResourceAsStream()的方法

    ---获取到这个XML文档的流

    ★InputStream is =  类名.class.getResourceStream("/文件名");

    b.创建解析器

    ★SAXReader sr = new SAXReader();

    c.调用解析器的read()方法传入获取到的XML文件流,使用文档对象接收

    ★Document doc = sr.read(is);

    ------------------------------------------DOM4J获取XML文件的元素方法--------------------------------------------------------------------

    ◆◆◆注;必须要先获取到根节点,在根据根节点获取到其他节点◆◆◆

    DOM4J获取元素方法; --- 使用Element Object调用

    1.getRootElement() 获取到根节点

    2.elements(写/没写)           只能写子标签,不可以写孙标签

      没写;获取到所有的子标签标签  返回的是一个集合

      写了;获取到指定标签名的所有标签

    3.getName();    获取到标签名

    4.elementText() 获取到标签的内容

    5.element()     获取到指定标签

    6.elementById() 获取到指定的Id标签

    7.elementIterator() 获取到标签迭代器

    8.getQName()   获取到标签名

    获取属性的方法;----使用Element Object调用

    1.attributeValue()  获取到指定的属性的值

    2.attirbutes()    获取到所有的属性

    添加的方法;----使用Element Object 调用

    1.addElement() 添加元素

    2.addAttribute() 添加属性

    3.addCDATA()  添加CDATA

    4.addText()  添加标签内容

    直接删除元素方法;使用获取到的元素对象,

      ◆ 调用detach()方法可以删除这个元素和这个元素的所有子元素。

    如;element.detach()

    ------------------------------------------DOM4J刷新文件--------------------------------------------------------------------

    DOM4J刷新文件;

    1.声明文件内容的写入格式。

    a.缩进格式;

    OutputFormat of =OutputFormat.createPrettyPrint();

    b.行内格式;

    OutputFormat of =OutputFormat.createCompactFormat();

    2.创建写入器

    XMLWriter writer = newXMLWriter("FileStream_Path","OutputFormat_Obj");

    3.调用写入器的方法写入重写写入文件

    writer.write("Document_Obj");

    ◆注;

    1.将获取到的XML文档对象的内容转换成一个字符串

    String Document.asXML();

    2.将字符串转换成一个XML文档对象

    Document.DocumentHanper.parseText("String_Obj");

    ------------------------------------------DOM4J创建 --> 写入过程--------------------------------------------------------------------

         ◆◆◆注意导包◆◆◆

    1.创建解析器对象;

    SAXReader reader = new SAXReader()

    2.调用解析器方法获取到XML文档;

    Document doc =reader.read("String_Path");

    3.获取到根路径;

    Element doc.getRootElement();

        ---4.1;将获取到的文档对象转换成字符串

    String doc.asXML();

        ---4.2;将字符串解析成一个XML文档对象

    DocumentDocumnetHanper.parseText("String");

    5.规定写入XML文件的格式;

    1.OutputFormat of =

    OutputFormat.createPattryPrint(); --- 缩进格式

    2.OutputFormat of =

    OutputFormat.createCompactFormat(); --- 行内格式

    6.创建写入器;

    XMLWriter writer = new XMLWriter("FileStream_Path",OutputFormat);

    7.调用写入器的写入XML文件的方法;

    writer.wirte(Document);

    8.关闭流;

    writer.close();

    ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■↓↓↓↓↓↓Xpath—— 查询表达式↓↓↓↓↓↓↓↓■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■

    Xpath;

    为什么要有?

    在DOM4J中加载文件时,直接加载整个文件到内存中的,不便于获取某一个指定的节点。

    什么是Xpath?

        1、是一个查询表达式语言,也是一个开源的语言

        2、在DOM4J中融合了这个Xpath这个查询表达式语言

        3、这个语言也是一个组件来的,但是在DOM4J组件中已经附带了

    dom4J --- lib --- jaxen-1.1-beta-6.jar

      作用;

      可以通过Xpath表达式快速定位到某一个XML文件的节点。

    ------------------------------------------Xpath—— 表达式符号--------------------------------------------------------------------

    表达式符号;

      //x    相对定位到某节点

      /x     绝对定位绝对定位到某一个节点

      /*     是所有节点

     [num]   第N个节点

     [@x]  选中到某一个属性

     normalize-span 去空格

     [text()]  获取到内容

    ------------------------------------------Xpath—— 使用--------------------------------------------------------------------

    Xpath的使用;

    DOM4J的selectNodes("表达式"); 方法

    DOM4J的selectSingleNode("表达式");  方法

    Document .selectNodes() ------  是返回所有节点的集合

    Document .selectSingleNode("表达式")  ----- 返回某一个具体的节点

    ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■↓↓↓↓↓↓JAXP —— 解析技术↓↓↓↓↓↓↓↓■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■

    JAXP解析技术;

    是Sun公司开发的,是XML文档解析技术的一个集合统称。

    包含;

    DOM解析

    一次性读取整个文件到内存中。

    SAX解析

    读取一行,解析一行,处理一行。

    这2项解析技术都是由SUN公司制定的,较规范

    ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■↓↓↓↓↓↓JAXP——SAX —— 解析技术↓↓↓↓↓↓↓↓■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■

    SAX解析技术;

    为什么要有?

    1.DOM4J不适合大文件的读取,因为一次性加载整个文件。

    是什么?

    1.Simple API For XML 简单的解析XML文档API,是由SUN公司定义的一个解析技术,较规范。

    2.也是融合了DOM4J的部分技术。

    作用;

    用于解析XML文档的一个解析技术

    特点;

    一次读取一行,解析一行,处理一行。

    适合大文件的存取,不适合增删改查。

    ◆注;由于是SUN公司开发的,而在Eclipse或MyEclipse中已经有了组件。

    ◆◆◆◆◆注;SAX解析主要是用于查询,一般都不使用写入操作,因为一般的XML文件都不会太大

    -----------------------------------------SAX获取XML文件的方式--------------------------------------------------------------------

    SAX获取XML文件的方式;

        只有 2 种,传入的字符串是···绝对路径···或···相对路径···

    -----------------------------------------SAX获取XML文件的流程--------------------------------------------------------------------

    SAX获取XML文件的流程;

    因为是SUN公司定义的所以也较规范,也定义了获取XML文件的流程

        1.获取到解析器工厂对象

    SAXParserFactory spf =SAXParserFactory.newInstance();

        2.通过解析器工厂对象获取到具体的解析器对象

    SAXParser sp =spf.newSAXParser();

        3.通过具体的解析器对象,获取到读取器

    XMLReader reader =sp.getXMLReader()

        4.通过调用读取器的setContentHandler(obj)方法设置事件处理

    reader.setContentHandler(obj);

        5.调用读取器的解析方法,解析XML文件

        reader.parse("绝对路径/相对路径");

    ◆注;具体的事件处理在继承事件处理接口·下·的具体实现类,的类中定义

    事件处理;

     在SAX中引入了一个事件处理的概念,是用于对文件的内容进行的处理。

    1.在调用解析文件parse()的方法,时会触发事件处理方法中的对象的···主要三个方法···

    2.而事件处理ContenHandler是一个接口,

    如果实现这个了接口则需要实现这个接口的所有方法

    所以可以实现这个接口的具体的实现类。

    主要三个方法;

    startElement(String uri, String localName,String qName,

         Attributes attributes)

          ----- 获取到开始标签

    characters(char[] ch, int start, int

    length) ----- 获取到标签内容

    endElement(String uri, String localName,String qName)

        ----- 获取到结束标签

    ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■↓↓↓↓↓↓JAXP——DOM —— 解析技术↓↓↓↓↓↓↓↓■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■

    JAXP-DOM解析技术;

    为什么要有?

    1.在SUN公司定义了一个SAX解析,而这个解析的特点是,每次读取一行,

    而不便于增删改。。。。。

    2.而不用DOM4J,因为如果是使用SUN公司定义的标准较规范,

    3.使得代码便于阅读,因为在阅读是不必查看是使用什么技术。。。。。

    4.在未来的开发中统一使用SUN公司的技术,可以使得兼容性问题的风险降低。。

    是什么?

    JAXP-DOM解析技术是由SUN公司开发的,里面融合了DOM4J的部分技术

    作用;

    可以用于解析XML文档。

    特点;

    1.一次性加载整个XML文档到内存中。

    2.不适合大的文档存取,适合增删改查

    3.也是一个倒立的树型结构。

    4.也是遵循DOM规范的。

    ------------------------------ JAXP——DOM —— 创建->获取XML文档流程-------------------------------------------------------------------

    Jaxp-DOM创建流程;

    1.获取到Jaxp_DOM解析工厂对象

    DocumentBuilderFactory dbf =DocumentBuilderFactory.newInstance();

    2.通过解析工厂对象获取到具体的解析器对象

    DomcumentBuilder db =dbf.newDocumentBuilder();

    3.通过解析器的解析XML文档的方法获取到XML文档

    Document doc = db.parse("绝对路径/相对路径")

    操作文档元素的方法;

    参考;Java_API ---> Document对象,中的方法

      和DOM4J/SAX类似

    ◆◆◆注;不可以使用通过类名获取到文件输入流对象

      Node n =

    doc.getElementsByTagName("节点名")[num];

    -------------------------------- JAXP——DOM —— 创建->写入XML文档流程--------------------------------------------------------------------

    JAXP-DOM创建-写入;

     1.获取到JAXP-DOM解析工厂接口对象

    DocumentBuilderFactory dbf =DocumentBuilderFactory.newInstance();

     2.通过解析工厂的对象获取到具体的解析器对象

    DocumentBuilder bd =dbf.newDocumentBuilder();

     3.使用解析器对象的parse()方法,获取到XML文档的对象

      Document doc = bd.parse(绝对路径/相对路径);

     4.1.在JAXP-DOM的中加入了插入的insertBefore();的方法

      a.创建节点

      Element_Obj.createElement("结点名");

      b.获取到参考节点

      c.获取到某一个节点(父节点)

    Element ele =doc.getDocumentElement();

      d.通过父节点插入某一个节点

      ele.insertBefore(插入的节点,参考节点);

    5.创建写入工厂对象 【transformer转换模型】

    TransformerFactory tff =TransformerFactory.newInstance();

    6.通过工厂对象获取到具体的写入对象

    Transformer tf = tff.newTransformer();

    <------

    7.调用写入对象的write方法写入

       ▲--> tf.write(new

    DOMSource("源文件路径"),new StreamResult(new

    FileOutputStream("目标路径")));

    ◆◆◆注;

    1.new DOMSource() 是一个类,而这个类可以关联要转换的Document对象

    2.new StreamResult() 是一个类,可以表示数据写出的目的地。

    ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■↓↓↓↓↓↓ XML—— 约束↓↓↓↓↓↓↓↓■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■

    XML约束;

    为什么要有?

    在XML文档中的标签可以随意定义,使得文档不规范,

    也避免用户输入有误,提高用户的体验性。

    如;在描述人职业的XML文档中,用户不小心写错了或有人故意破坏,写了个动物标签。

    什么是XML约束?

    规定(规范)XML文档的书写格式。

    作用;

    使得文档变得规范,便于阅读,提高用户的体验性。

    主流约束;

    DTD

       是一个控制不是很精准的一个约束技术

       文件后缀是.dtd

    Scheme

       是一个控制精准的一个约束技术,逐步的取代DTD

       文件后缀是.xsd

    ◆◆◆注;叫是叫Scheme而在书写scheme约束文档时是写schema

    ----因为Schema的意思更加具体。

      schema :模式,计划

      scheme :计划,策划,体制

    ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■↓↓↓↓↓↓ DTD—— 约束↓↓↓↓↓↓↓↓■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■

    DTD约束;

    是什么?

    Document Type Definition 文档类型定义

    作用;

    用于规定(规范)一个XML文档的书写格式

    特点;

    对文档的内容控制不够精准是,如做不到内容的控制等。

    --------------------------------------------DTD文档定义--------------------------------------------------------------------

    DTD文档定义;

    1.常用的数据类型;

    (#PCDATA) 可变长度的字符串

    EMPTY   空类型 【一般用于定义闭合标签】

    ANY 任意类型

    2.常用的定义符号;

    ? 0或1

    + 1或N

    * 0或N

    () 必须出现 1次

    3.常用的定义元素的关键字;

     ELEMENT   定义元素

     ATTLIST   定义元素的属性

      ◆注;

     1.都是大写

     2.一个标签名可以同时使用2个,

     因为;ELMENT是定义元素

           ATTLIST   是定义元素的属性

    4.定义属性常用的关键字;

    1.#REQUIRED 必须给这个标签定义该属性

    2.#IMPLIED  这个属性可写可不写

    3.#Fixed    给这个属性定义一个固定值

    --------------------------------------------DTD文档引入方式--------------------------------------------------------------------

    DTD文档引入方式;

    1.外部引入;

         <!DOCTYPE 根名 SYSTEM "文件名">

    2.内部定义;

       <!DOCTYPE 根名[

      <!ELEMENT 根名(子标签)>

      <!ELEMENT 子(#PCDATA)>

    ]>

    3.外部引入;key ---value

       <!DOCTYPE 根名 PUBLIC "名称空间【唯一】"  "文件名">

    --------------------------------------------DTD文档定义--------------------------------------------------------------------

    1.文件后缀是DTD

    <!ELEMENT 书名 (作者+,价格?)>

    <!ElEMENT 作者(#PCDATA)>

    <!ATTLIST 作者titile CDATA #IMPLIED>

    <!ELEMENT 价格(#PCDATA)>

    2.DTD文件没有注释

    ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■↓↓↓↓↓↓ Scheme —— 约束↓↓↓↓↓↓↓↓■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■

    Scheme约束;

      为什么要有?

      1.DTD约束对XML的格式控制不够精准

      2.使得用户可选择性更多,因为Scheme也比较麻烦

     是什么?

      Scheme;体制,策划

     作用;

      规范(规定)XML的文档书写格式

     为什么说Scheme控制更加精准?

      1.可选择规定的内容类型更多

      2.内容类型的控制

      3.内容的规定

     特点;

      1.文件后缀是.xsd

      2.scheme文件的也是属于一个XML文件,因为声明处与XML一样

      3.文件的根节点一定是【schema】

          ◆◆◆注;不要写成scheme ,

          scheme 是策划,计划,体制

          schema 是 计划,模式

    --------------------------------------------Scheme文档定义--------------------------------------------------------------------

    Scheme文档定义;

    1.可以指定一个自定义名

    2.xmlns 的W3C域名是固定的格式,不可以改变

      3.targetNamespace 域名名称空间可以自定义,但是是要求唯一的

      4.elementFormDefault 是固定的格式

      5.根标签一定要是 【schema】

    常用关键字解析;

    sequence 序列;

    是指定约束XML文件定义节点时

    按照一个什么顺序进行一个定义

      complextype 复杂类型;

          是在xsd文档声明这个节点下有子节点。

    name;

    是标签名

    type;

    是标签内容类型

    ★注;type如果设置成数值型(double,decimal....)的,一般都是要显示的赋值

    常见的单词

      Ocuurs 重视的意思

      decimal 小数

    --------------------------------------------Scheme文档开头解析--------------------------------------------------------------------

    xs是自定义的一个标识符

    名称空间是一个key,保证唯一性用于约束XML文档时,XML文档找到这个文档

    <?xml version = "1.0" encoding

    = "UTD-8">                

    ----- 指定文档类型

    <xs:schema xmlns:xs =

    "http://www.w3.org/2001/XMLSchema"  ----- 固定的格式

      targetNamespace = "自定义"                

        ----- 自定义域名,用于标识,

       |====一般是域名,保证在网络上的唯一性

      elementFormDefault =

    "qualified"               ----- 固定格式,qualified;合格

    ----------------------------------XML文档——引用 ——Scheme文档--------------------------------------------------------------------

    1.my ----- 是自定义的一个名字,可以用于在引入多个约束文件时,可以区分

    2.xis ----- 是自定义的,也是可以用于在引入多个约束文件时区分,

    3.xmlns:xis ="http://www.w3.org/2001/XMLSchema-instance"

    ----- 是固定格式

    4.xis:schemaLacation ----- 引入一个本地的文件,通过使用名称空间 + 文件名 指定key + value

    <my:schema 【根名】xmlns:my = "scheme文档的名称空间值"

    xmlns:xis ="http://www.w3.org/2001/XMLSchema-instance"

       xis:schemaLacation =

    "scheme文档名称空间 文件名"

    相关文章

      网友评论

          本文标题:XML基本解析

          本文链接:https://www.haomeiwen.com/subject/ebcysctx.html