• XML操作


    XML简介

    XML是指可扩展标记语言(eXtensible Markup Language),它是一种标记语言,类似HTML。

    XML技术除用于保存有关系的数据之外,它还经常用作软件配置文件,以描述程序模块之间的关系

    XML结构

    文档声明

    <?xml version="1.0" encoding="UTF-8" ?>

    属性

    <天津 id='022'>

    注释

    <!-- -->

    CDATA区 、特殊字符 

    <![CDATA[展示的内容]]>

    是否独立

    * standalone="yes或者no" 代表xml的文件是否是独立的。(如果是no,不独立,可以引入外部的文件)(可选的)

    标签

    对于XML标签中出现的所有空格和换行,XML解析程序都会当作标签内容进行处理。例如:下面两段内容的意义是不一样的

    属性

    一个元素可以有多个属性,每个属性都有它自己的名称和取值,例如:<mytag id=“12” …/>

    元素中的属性是不允许重复的

    转义字符

    CDATA区

    CDATA是Character Data的缩写

     作用:把标签当做普通文本内容;

     语法:<![CDATA[内容]]>

     例子:

    <![CDATA[
    <itcast>www.itcast.cn</itcast>
    ]]>
    以上红色部分被当做普通文本而不是标签

    Dom4j解析xml

    Dom4j是一个简单、灵活的开放源代码的库。Dom4j是由早期开发JDOM的人分离出来而后独立开发的。与JDOM不同的是,dom4j使用接口和抽象基类,虽然Dom4j的API相对要复杂一些,但它提供了比JDOM更好的灵活性。 

    使用Dom4j开发,需下载dom4j相应的jar文件。

    Dom4j解析操作

    获取xml解析器  SAXReader   saxReader=new SAXReader();
    获取dom对象   Document doc=saxReader.read(new File(“xml文件路径”));(注意,xml文件路径最好放到项目里面,写路径地址的时候,使用相对地址 ./表示当前项目路径)
    
    nodeIterator()   获取当前document或者当前标签的所有子节点(注意:节点包括注释节点(注释节点name为null,值text为注释内容),标签节点,文本节点,属性节点)
    
    elements():获取标签下面的所有子标签,返回list的标签集合
    elementIterator():获取标签下面的所有子标签,返回标签迭代器
    getRootElement() 获取当前文档的根标签
    element("标签名字")获取某个标签下面指定名称的第一个标签对象
    elementText("标签名字")获取某个标签下面指定名称的第一个标签的text内容
    attribute("属性名称")  获取某个标签的指定名称的属性对象
    attributeValue("属性名称")  获取某个标签的指定名称的属性对象值

    使用Dom4j创建XML

    DocumentHelper.createDocument() 创建document文档
    addElement("Students");   增加指定名称的标签
    addAttribute("属性名", "属性值") 给标签新增指定的属性名称和属性值
    nameEle.setText("文本内容"); 给标签设置指定的内容
    OutputFormat.createPrettyPrint()  指定xml内容输出的文件格式:带有空格和换行,格式美观
    OutputFormat.createCompactFormat()  指定xml内容输出的文件格式:去掉空格和换行,一般用于正式的服务器上
    format.setEncoding("utf-8"); //设置xml文件的编码和解析的编码
    XMLWriter writer=new XMLWriter(outputStream, format);创建xml写入的对象
    writer.write(doc); 写入document文档

    使用dom4j修改xml

    attribute.setText("id2");  给属性赋值
    attribute.setValue("id2"); 给属性赋值  也可以通过增加同名属性的方法,修改属性值
    element.element("name").setText("ddddd") 给某个标签的文本设置值

    使用dom4j删除标签或属性

    rmElement.detach()  删除rmElement标签
    element.remove(rmElement) 删除rmElement标签
    attribute.detach() 删除attribute属性
    element.remove(attribute); 删除element属性

    DTD

    在XML技术里,可以编写一个文档来约束一个XML文档的书写规范,这称之为XML约束。

    DTD(Document Type Definition),全称为文档类型定义。

    dtd约束引入三种方式

    DTD约束即可以作为一个单独的文件编写,也可以在XML文件内编写

    使用内部DTD

    <!DOCTYPE  根节点  [   DTD的代码  ]>

    使用外部DTD

    <!DOCTYPE 根元素 SYSTEM “DTD文档路径”>

    如:<!DOCTYPE 书架 SYSTEM “book.dtd”>

     使用网络DTD

    当引用的DTD文档在公共网络上时,采用如下方式:

    <!DOCTYPE 根元素 PUBLIC “DTD名称” “DTD文档的URL”>
    如:<!DOCTYPE web-app PUBLIC 
    "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"
    "http://java.sun.com/dtd/web-app_2_3.dtd">

     DTD约束语法细节

    格式

    例如:

    <!ATTLIST 商品 

    类别 CDATA #REQUIRED 必须的

    颜色 CDATA #IMPLIED  可选的

    >

    属性值类型:

    CDATA:表示属性的取值为普通的文本字符串

     ENUMERATED (DTD没有此关键字):表示枚举,只能从枚举列表中任选其一,如(鸡肉|牛肉|猪肉|鱼肉)

     ID:表示属性的取值不能重复(不能只写数字)

     设置说明

     

     元素类型

    * (#PCDATA) 字符串

    * EMPTY 空

    * ANY 任意的

    * (子元素)

    子元素

    * , 子元素出现是有顺序的

    * | 子元素只能出现一个

    * + 子元素出现1次或多次

    * * 子元素出现0次或多次

    * ? 子元素出现0次或1次

    <?xml version="1.0" encoding="UTF-8"?>
    
    
    
    
    <!--<!DOCTYPE 书架 [-->
            <!--<!ELEMENT 书架 (书+)>-->
            <!--<!ELEMENT 书 (书名,价格,作者)>-->
            <!--<!ELEMENT 书名 (#PCDATA)>-->
            <!--<!ELEMENT 作者 (#PCDATA)>-->
            <!--<!ELEMENT 价格 (#PCDATA)>-->
    
    
            <!--]>-->
    
    <!DOCTYPE 书架 [
            <!ELEMENT 书架 (书+)>
            <!ELEMENT 书 ((作者?,价格*,类别)| 内容 )>
            <!ELEMENT  作者 (#PCDATA)>
            <!ELEMENT  价格 (#PCDATA)>
            <!ELEMENT  类别 (#PCDATA)>
            <!ELEMENT  内容 (#PCDATA)>
    
            ]>
    
    <书架>
        <>
            <作者>zzz</作者>
            <!--<作者>zzz</作者> 报错只能有一个作者-->
            <价格>123</价格>
            <类别>水果</类别>
        </>
        <>
            <作者>zzz</作者>
            <!--<价格>123</价格> *可以有多个价格-->
            <价格>123</价格>
            <类别>水果</类别>
        </>
        <>
            <!--<作者>zzz</作者>/选一个-->
            <!--<价格>123</价格>-->
            <!--<类别>水果</类别>--> 
            <内容>fasfasdfasf</内容>
        </>
    </书架>
  • 相关阅读:
    .net core 2.0以上版本加载appsettings.json
    BZOJ 2564: 集合的面积
    P3829 [SHOI2012]信用卡凸包
    P2215 [HAOI2007]上升序列
    P2511 [HAOI2008]木棍分割
    P2510 [HAOI2008]下落的圆盘
    P4053 [JSOI2007]建筑抢修
    P4050 [JSOI2007]麻将
    P4049 [JSOI2007]合金
    P4161 [SCOI2009]游戏
  • 原文地址:https://www.cnblogs.com/taozizainali/p/10945455.html
Copyright © 2020-2023  润新知