1.XML有什么用?

(1)可以用来保存数据

(2)可以用来做配置文件

(3)数据传输载体

2.XML格式

XML 元素必须遵循以下命名规则:

名称可以含字母、数字以及其他的字符
名称不能以数字或者标点符号开始
名称不能以字符 “xml”(或者 XML、Xml)开始
名称不能包含空格

元素分为简单元素与复杂元素:

简单元素:元素里面包含了普通的文字

复杂元素:元素里面还可以嵌套其他的元素

示例:

<?xml version="1.0" encoding="utf-8"?>
<stus>
<stu id="100">
<name>张三</name>
<age>13</age>
</stu>
<stu id="101">
<name>李四</name>
<age>14</age>
</stu>
</stus>

3.CDATA区

如果某段字符串里面有过多的字符, 并且里面包含了类似标签或者关键字的这种文字,不想让xml的解析器去解析。 那么可以使用CDATA来包装。

CDATA区段开始于"<![CDATA[",结束于"]]>"。

示例:

 <?xml version="1.0" encoding="utf-8"?>
<stus>
<stu id="100">
<name>张三</name>
<age>13</age>
<search><![CDATA[<a href="http://www.baidu.com">百度</a>]]></search>
</stu>
<stu id="101">
<name>李四</name>
<age>14</age>
</stu>
</stus>

4.JAVA解析XML

解析,就是把xml里面的文本数据提取出来。

XML解析有很多种方式,比较常用的有两种,分别是DOM和SAX。

两者的区别如下:

针对上面两种解析,有一些公司给出了JAVA的解决方案,例如jaxp,jdom,dom4j。用的比较多的是dom4j。

先要下载jar包进行导入,附上官网地址:https://dom4j.github.io/

这里用的是dom4j-1.6.1.jar。

5.DOM4j的基本使用

public static void main(String[] args) throws DocumentException {
// 创建sax读取对象
SAXReader reader = new SAXReader();
// 指定解析的xml源
Document document = reader.read(new File("src/com/pr/xml/students.xml"));
// 得到根元素
Element rootElement = document.getRootElement();
// 获取元素的名字getName()
System.out.println(rootElement.getName());
// 获取根元素下的stu元素
System.out.println(rootElement.element("stu").getName());
// 获取stu元素下的name元素
System.out.println(rootElement.element("stu").element("name").getName());
// 获取name元素的文本getText()
System.out.println(rootElement.element("stu").element("name").getText());
}

这样子只能获取一个学生的全部信息,如果需要遍历全部:

public static void main(String[] args) throws DocumentException {
// 创建sax读取对象
SAXReader reader = new SAXReader();
// 指定解析的xml源
Document document = reader.read(new File("src/com/pr/xml/students.xml"));
// 得到根元素
Element rootElement = document.getRootElement(); // 得到根元素下一层级的所有元素,也就是两个stu
List<Element> list = rootElement.elements();
for (Element element:list) {
String name = element.element("name").getText();
String age = element.element("age").getText();
System.out.println(name + ":" + age);
}
}

6.DOM4j的XPath使用

(1)首先添加jar包依赖:https://mvnrepository.com/artifact/jaxen/jaxen

这里用的是:jaxen-1.1.1.jar

(2)知道XPath怎么用,具体可以看看W3C

示例代码:

public static void main(String[] args) throws DocumentException {
// 创建sax读取对象
SAXReader reader = new SAXReader();
// 指定解析的xml源
Document document = reader.read(new File("src/com/pr/xml/students.xml"));
// 得到根元素
Element rootElement = document.getRootElement(); // selectSingleNode获取的是第一个,只返回一个
Element nameElement = (Element) rootElement.selectSingleNode("//name");
System.out.println(nameElement.getText()); // 获取xml里面的所有name元素
List<Element> list = rootElement.selectNodes("//name");
for (Element element:list) {
System.out.println(element.getText());
} }

7.XML约束

如下的文档, 属性的ID值是一样的。 这在生活中是不可能出现的。 并且第二个学生的姓名有好几个。 一般也很少。那么怎么规定ID的值唯一, 或者是元素只能出现一次,不能出现多次? 甚至是规定里面只能出现具体的元素名字。

    <stus>
<stu id="10086">
<name>张三</name>
<age>18</age>
<address>深圳</address>
</stu>
<stu id="10086">
<name>李四</name>
<name>李五</name>
<name>李六</name>
<age>28</age>
<address>北京</address>
</stu>
</stus>

XML的约束有两种方式:DTD(.dtd)与Schema(.xsd)

DTD:语法自成一派, 早起就出现的。 可读性比较差。

Schema:其实就是一个xml , 使用xml的语法规则, xml解析器解析起来比较方便 , 是为了替代DTD 。
但是Schema 约束文本内容比DTD的内容还要多。 所以目前也没有真正意义上的替代DTD

  • DTD

(1)DTD的基本格式

示例:

    <!ELEMENT stus (stu)>  : stus 下面有一个元素 stu  , 但是只有一个
<!ELEMENT stu (name , age)> stu下面有两个元素 name ,age 顺序必须name-age
<!ELEMENT name (#PCDATA)>
<!ELEMENT age (#PCDATA)>
<!ATTLIST stu id CDATA #IMPLIED> stu有一个属性 文本类型, 该属性可有可无

(2)DTD的引入

1. 引入网络上的DTD

   <!-- 引入dtd 来约束这个xml -->

          <!--    文档类型  根标签名字 网络上的dtd   dtd的名称   dtd的路径

          <!DOCTYPE stus PUBLIC "//UNKNOWN/" "unknown.dtd"> -->

2. 引入本地的DTD

      <!-- 引入本地的DTD  : 根标签名字 引入本地的DTD  dtd的位置 -->
<!-- <!DOCTYPE stus SYSTEM "stus.dtd"> --> 3. 直接在XML里面嵌入DTD的约束规则 <!-- xml文档里面直接嵌入DTD的约束法则 --> <!DOCTYPE stus [
<!ELEMENT stus (stu)>
<!ELEMENT stu (name,age)>
<!ELEMENT name (#PCDATA)>
<!ELEMENT age (#PCDATA)>
]> <stus>
<stu>
<name>张三</name>
<age>18</age>
</stu>
</stus>
  • Schema

(1)Schema的基本格式

示例:

    <!-- xmlns  :  xml namespace : 名称空间 /  命名空间
targetNamespace : 目标名称空间 。 下面定义的那些元素都与这个名称空间绑定上。
elementFormDefault : 元素的格式化情况。 -->
<schema xmlns="http://www.w3.org/2001/XMLSchema"
targetNamespace="http://www.w3.org/teacher"
elementFormDefault="qualified"> <element name="teachers">
<complexType>
<sequence maxOccurs="unbounded">
<!-- 这是一个复杂元素 -->
<element name="teacher">
<complexType>
<sequence>
<!-- 以下两个是简单元素 -->
<element name="name" type="string"></element>
<element name="age" type="int"></element>
</sequence>
</complexType>
</element>
</sequence>
</complexType>
</element>
</schema> 实例文档:
<?xml version="1.0" encoding="UTF-8"?>
<!-- xmlns:xsi : 这里必须是这样的写法,也就是这个值已经固定了。
xmlns : 这里是名称空间,也固定了,写的是schema里面的顶部目标名称空间
xsi:schemaLocation : 有两段: 前半段是名称空间,也是目标空间的值 , 后面是约束文档的路径。
-->
<teachers
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns="http://www.w3.org/teacher"
xsi:schemaLocation="http://www.itheima.com/teacher teacher.xsd"
>
<teacher>
<name>zhangsan</name>
<age>19</age>
</teacher>
<teacher>
<name>lisi</name>
<age>29</age>
</teacher>
<teacher>
<name>lisi</name>
<age>29</age>
</teacher>
</teachers>

(2)名称空间的作用

一个xml如果想指定它的约束规则, 假设使用的是DTD ,那么这个xml只能指定一个DTD , 不能指定多个DTD 。 但是如果一个xml的约束是定义在schema里面,并且是多个schema,那么是可以的。简单的说: 一个xml 可以引用多个schema约束。 但是只能引用一个DTD约束。

名称空间的作用就是在 写元素的时候,可以指定该元素使用的是哪一套约束规则。 默认情况下 ,如果只有一套规则,那么都可以这么写

<teachers xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
xmlns:aa="http://www.w3.org/teacher"
xmlns:bb="http://www.w3.org/teacher"
xsi:schemaLocation="http://www.itheima.com/teacher teacher.xsd" >
<name>张三</name> <aa:name></aa:name>
<bb:name></bb:name>

XML、java解释XML、XML约束的更多相关文章

  1. JAVA基础学习之XMLCDATA区、XML处理指令、XML约束概述、JavaBean、XML解析(8)

    1.CDATA区在编写XML文件时,有些内容可能不想让解析引擎解析执行,而是当作原始内容处理.遇到此种情况,可以把这些内容放在CDATA区里,对于CDATA区域内的内容,XML解析程序不会处理,而是直 ...

  2. JAVA企业级开发-xml基础语法&约束&解析(04)

    一.什么是xml html:超文本标记语言.它主要是用来封装页面上要显示的数据,最后通过浏览器来解析html文件,然后把数据展示在浏览器上.同样我们可以使用JS和DOM技术对html文件进行解析和操作 ...

  3. Java xml 操作(Dom4J修改xml   + xPath技术  + SAX解析 + XML约束)

    1 XML基础 1)XML的作用 1.1 作为软件配置文件 1.2 作为小型的"数据库" 2)XML语法(由w3c组织规定的) 标签: 标签名不能以数字开头,中间不能有空格,区分大 ...

  4. xml语法、DTD约束xml、Schema约束xml、DOM解析xml

    今日大纲 1.什么是xml.xml的作用 2.xml的语法 3.DTD约束xml 4.Schema约束xml 5.DOM解析xml 1.什么是xml.xml的作用 1.1.xml介绍 在前面学习的ht ...

  5. PowerProfile.java与power_profile.xml

    转载自http://blog.csdn.net/green1900/article/details/42427871 现在诸多关于电池管理的应用做的极其绚烂,可实现如耗电应用排行.剩余时间计算.关闭耗 ...

  6. java生成解析xml的另外两种方法Xstream

    Xstream生成和解析xm和JAXB生成和解析xml的方法. 一,Xstream Xstream非jdk自带的,需要到入Xstream-1.4.3.jar和xpp3_min-1.1.4.jar 1. ...

  7. Java Ant build.xml详解

    1,什么是antant是构建工具2,什么是构建概念到处可查到,形象来说,你要把代码从某个地方拿来,编译,再拷贝到某个地方去等等操作,当然不仅与此,但是主要用来干这个3,ant的好处跨平台   --因为 ...

  8. JAVA bean与XML互转的利器---XStream

    最近在项目中遇到了JAVA bean 和XML互转的需求, 本来准备循规蹈矩使用dom4j忽然想起来之前曾接触过的XStream, 一番研究豁然开朗,利器啊利器, 下来就XStream的一些用法与大家 ...

  9. (转)Java Ant build.xml详解

    1,什么是ant ant是构建工具2,什么是构建概念到处可查到,形象来说,你要把代码从某个地方拿来,编译,再拷贝到某个地方去等等操作,当然不仅与此,但是主要用来干这个3,ant的好处跨平台   --因 ...

  10. JAXB java类与xml互转

    JAXB(Java Architecture for XML Binding) 是一个业界的标准,是一项可以根据XML Schema产生Java类的技术.该过程中,JAXB也提供了将XML实例文档反向 ...

随机推荐

  1. 20165218 2017-2018-1 《Java程序设计》第三周学习总结

    20165218 2017-2018-1 <Java程序设计>第三周学习总结 教材学习内容总结-第四章 类与对象 面向对象语言 需要完成某种任务时,首先要想到,谁去完成任务,即哪个对象去完 ...

  2. HDOJ(HDU).2191. 悼念512汶川大地震遇难同胞――珍惜现在,感恩生活 (DP 多重背包+二进制优化)

    HDOJ(HDU).2191. 悼念512汶川大地震遇难同胞――珍惜现在,感恩生活 (DP 多重背包+二进制优化) 题意分析 首先C表示测试数据的组数,然后给出经费的金额和大米的种类.接着是每袋大米的 ...

  3. 【贪心】【P2117】小Z的矩阵

    传送门 Description 小Z最近迷上了矩阵,他定义了一个对于一种特殊矩阵的特征函数G.对于N*N的矩阵A,A的所有元素均为0或1, 当然询问一个矩阵的G值实在是太简单了.小Z在给出一个N*N矩 ...

  4. jq的each理解

    1种 通过each遍历li 可以获得所有li的内容 <!-- 1种 --> <ul class="one"> <li>11a</li> ...

  5. angularJS前端分页插件

    首先在项目中引入 分页插件的 js 和 css: 在html页面引入 相关js 和 css: 在控制器中引入分页插件中定义的 module[可以打开pagination.js查看,可以看到 其实,在插 ...

  6. 【Android开发】范例1-绘制Android的机器人

    下面这个实例通过前面学过的Paint.Canvas等2D绘画技术来实现在手机屏幕上绘制Android机器人的小实例. 具体代码实现和效果: 用来显示自定义的绘图类的布局文件 res/layout/ma ...

  7. 从samsung提供内核进行移植

    1.尝试编译分析结果 配置编译下载尝试 (1)检查Makefile中ARCH和CROSS_COMPILE(2)make xx_defconfig(3)make menuconfig(4)make -j ...

  8. Java并发之同步原语

    volatile: 定义:Java编程语言允许线程访问共享变量,为了确保共享变量内被准确和一致性地更新,线程应该确保通过排它锁单独获得这个变量.根据volatile的定义,volatile有锁的语义. ...

  9. [freemarker篇]05.关于集合的遍历

    人啊,有的时候就是没有办法坚持一些事情,总是因为各种理由在推脱,逐渐就变成了拖延症!例如胖先生的减肥计划,其实本来就没有计划,属于散漫形式的!一直减肥,一直在肥!总是说没有时间,没有时间!其实有时候就 ...

  10. [cerc2012][Gym100624A]20181013

    A 题意:n(n<=20)个国家,每个国家之间有一些债务关系,总体为负债的国家会破产,破产国家的债务关系全部消除.问哪些国家可能成为最后一个唯一存在的国家. 题解: 对于每一个状态,面对若干个负 ...