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[内容]]>

原文地址:https://www.cnblogs.com/gg128/p/9534155.html