zoukankan      html  css  js  c++  java
  • xml的使用入门

    1.什么是xml

    Xml是一种标记语言,没有固定的标签,被用于信息的记录和传递,全称为可拓展性标记语言。

    2.语法:

    必须声明,用于描述xml的版本和编码方式,Xml有且只有一个根元素,Xml对大小写敏感,标签成对出现,且要正确嵌套,不能交叉,属性值要使用双引号

    <?xml version="1.0" encoding="UTF-8"?> //xml声明版本与编码信息
    <dependencies>//根元素
                  <dependency>
                 <!-- <label for="exampleInputEmail1"> 其中的for属于属性-->  //注释
                         <groupId>redis.clients</groupId>
                         <artifactId>jedis</artifactId>
                         <version>2.9.0</version>//元素,元素由开始标签,内容,结束标签组成
                  </dependency>
    </dependencies>
    

    备注:

    xmlns=http://java.sun.com/xml/ns/javaee //默认命名空间,使得该标签本省以及他的所有子元素都属于这个名称空间,避免文档中产生的命名冲突,使得元素和属性名在整个系统中是唯一的,同时也限定了这些元素的作用范围,子标签中的属性不属于该名称空间,命名空间的处理方式与处理属性的方式不同,

    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" //xsi前缀开头的名称空间,很多时候它并没有包括任何的元素,例如<person xmlns:hr=”www.wwww.www”> </person>,倘若需要关联起来,那么在标签前需要使用相应的前缀。例如<hr:person xmlns:hr=”www.wwww.www”> </hr:person>,假如需要属性也属于该名称空间,那么在属性前加hr:前缀;假如元素属于一个名称空间,那么他的属性也会被唯一标识,没必要为属性指定命名空间。

    xsi:schemaLocation=http://maven.apache.org/POM/4.0.0    http://maven.apache.org/xsd/maven-4.0.0.xsd //前部分是targetnamespace,后半部分是文件保存的文件路径加文件名,用于约束书写的格式,xsd属于约束文件,xsd是dtd替代者,dtd不可扩展,不支持命名空间,只提供非常有限的数据类型,xsd可扩展,持数据类型,支持命名空间,xml书写;Xml  schema xml工作原理是基于名称空间指定数据格式和数据类型。

    名称空间的作用域:该标签和子元素;

    3.自定义dtd标签语法:

    1)<!DOCTYPE 根元素[元素声明]>

    2)<!ELEMENT 元素名(子元素[, 子元素...])>//约束元素的嵌套层级

    3)<!ELEMENT 标签名字 标签类型>//约束元素体里面的数据

    /*

    PCDATA (#PCDATA) 被解释的字符串数据 

    EMPTY EMPTY 即空元素,例如<hr/>

    ANY ANY 即任意类型

    例如:

    <!ELEMENT 书名 (#PCDATA)> <!‐‐"书名"元素体为字符串数据‐‐>

    <!ELEMENT 作者 (#PCDATA)> <!‐‐"作者"元素体为字符串数据‐‐>

    <!ELEMENT 售价 (#PCDATA)> <!‐‐"售价"元素体为字符串数据‐‐>

    <!ELEMENT 出版日期 ANY> <!‐‐"出版日期"元素体为任意类型‐‐>

    <!ELEMENT 版本号 EMPTY> <!‐‐"版本号"元素体为空元素‐‐>

    */

    /*数量词符号含义

    * 表示元素可以出现0到多个

    + 表示元素可以出现至少1个

    ? 表示元素可以是0或1个

    , 表示元素需要按照顺序显示

    | 表示元素需要选择其中的某一个*/

    4)<!ATTLIST 标签名称

    属性名称1 属性类型1 属性说明1

    属性名称2 属性类型2 属性说明2

    /*

    CDATA 代表属性是文本字符串

    ID 代码该属性值唯一,不能以数字开头

    ENUMERATED代表属性值在指定范围内进行枚举

    */

    /*

    #REQUIRED 代表属性是必须有的

    #IMPLIED 代表属性可有可无

    #FIXED 代表属性为固定值

    */

    <!DOCTYPE scores SYSTEM "dtd名称"> //<!-- 引入外部DTD文件-->

    4.Xml解析

    1)可使用的方法

    Dom解析(java官方建议),sax解析,jdom解析,第三方dom4j解析

    备注:

    DOM:要求解析器把整个XML文档装载到内存,并解析成一个Document对象

    a)优点:元素与元素之间保留结构关系,故可以进行增删改查操作。

    b)缺点:XML文档过大,可能出现内存溢出

    SAX:是一种速度更快,更有效的方法。它逐行扫描文档,一边扫描一边解析。并以事件驱动的方式进行具体解析,每执行一行,都触发对应的事件。

    2)dom4j解析实例

    <dependency>
        <groupId>dom4j</groupId>
        <artifactId>dom4j</artifactId>
        <version>1.6</version>
    </dependency>
    public class TestXml {
        public static void main(String[] args) throws Exception {
            SAXReader reader = new SAXReader();// 创建SAXReader对象, 用于读取xml文件
            Document doc = reader.read(new File("src/scores2.xml"));// 读取xml文件, 得到Document对象
            Element root = doc.getRootElement();// 获取根元素
            Iterator<?> it = root.elementIterator();//获取根元素下所有子元素
            while(it.hasNext()) { // 取出元素
               Element e = (Element) it.next();
                Attribute id = e.attribute("id");// 获取id属性值,id可以写任意的属性名
                Element name = e.element("name"); // 获取指定名称第一个子元素
            }
        }
    }
    

    备注:

    a)dom解析的原理

    XML DOM 和 HTML DOM一样,XML DOM 将整个XML文档加载到内存,生成一个DOM树(按照xml的层次结构),并获得一个Document对象,通过Document对象就可以对DOM进行操作。

    b)其他方法

    String getName() 获得当前元素的元素名

    String elementText(Sting ele) 获得指定名称子元素的文本值

    String getText() 获得当前元素的文本内容

    c)Dom4J结合XPath解析XML:

    XPath 使用路径表达式来选取HTML 文档中的元素节点或属性节点。节点是通过沿着路径 (path) 来选取的。/表示根元素,不能跨越元素标签

    5.字符的转义//在xml中不能使用<  与 &,需要转义

    1)转义字符

    <    &lt; 小于

    >    &gt; 大于

    "     &quot; 双引号

    '     &apos; 单引号

    &    &amp; 和号

    2)CDATA转义

    <![CDATA[内容]]>

  • 相关阅读:
    信息收集之DNS域名解析
    集合遍历利器 -- 迭代器模式 介绍 使用场景案例 优缺点及程序演示
    简单工厂的霸霸 -- 抽象工厂模式 介绍 使用场景案例 优缺点及程序演示
    可能是目前最易理解的手写promise
    chrome 开发者工具实用技巧
    gulp常用插件之modernizr使用
    koa-cors 跨域设置中间件
    在nodejs 中如何fs文件系统模块
    nodejs操作MongoDB数据库 MongoDB增、删、改、查
    vue动态渲染样式 class
  • 原文地址:https://www.cnblogs.com/gg128/p/9534155.html
Copyright © 2011-2022 走看看