XML、java解释XML、XML约束
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约束的更多相关文章
- JAVA基础学习之XMLCDATA区、XML处理指令、XML约束概述、JavaBean、XML解析(8)
1.CDATA区在编写XML文件时,有些内容可能不想让解析引擎解析执行,而是当作原始内容处理.遇到此种情况,可以把这些内容放在CDATA区里,对于CDATA区域内的内容,XML解析程序不会处理,而是直 ...
- JAVA企业级开发-xml基础语法&约束&解析(04)
一.什么是xml html:超文本标记语言.它主要是用来封装页面上要显示的数据,最后通过浏览器来解析html文件,然后把数据展示在浏览器上.同样我们可以使用JS和DOM技术对html文件进行解析和操作 ...
- Java xml 操作(Dom4J修改xml + xPath技术 + SAX解析 + XML约束)
1 XML基础 1)XML的作用 1.1 作为软件配置文件 1.2 作为小型的"数据库" 2)XML语法(由w3c组织规定的) 标签: 标签名不能以数字开头,中间不能有空格,区分大 ...
- 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 ...
- PowerProfile.java与power_profile.xml
转载自http://blog.csdn.net/green1900/article/details/42427871 现在诸多关于电池管理的应用做的极其绚烂,可实现如耗电应用排行.剩余时间计算.关闭耗 ...
- java生成解析xml的另外两种方法Xstream
Xstream生成和解析xm和JAXB生成和解析xml的方法. 一,Xstream Xstream非jdk自带的,需要到入Xstream-1.4.3.jar和xpp3_min-1.1.4.jar 1. ...
- Java Ant build.xml详解
1,什么是antant是构建工具2,什么是构建概念到处可查到,形象来说,你要把代码从某个地方拿来,编译,再拷贝到某个地方去等等操作,当然不仅与此,但是主要用来干这个3,ant的好处跨平台 --因为 ...
- JAVA bean与XML互转的利器---XStream
最近在项目中遇到了JAVA bean 和XML互转的需求, 本来准备循规蹈矩使用dom4j忽然想起来之前曾接触过的XStream, 一番研究豁然开朗,利器啊利器, 下来就XStream的一些用法与大家 ...
- (转)Java Ant build.xml详解
1,什么是ant ant是构建工具2,什么是构建概念到处可查到,形象来说,你要把代码从某个地方拿来,编译,再拷贝到某个地方去等等操作,当然不仅与此,但是主要用来干这个3,ant的好处跨平台 --因 ...
- JAXB java类与xml互转
JAXB(Java Architecture for XML Binding) 是一个业界的标准,是一项可以根据XML Schema产生Java类的技术.该过程中,JAXB也提供了将XML实例文档反向 ...
随机推荐
- 20165218 2017-2018-1 《Java程序设计》第三周学习总结
20165218 2017-2018-1 <Java程序设计>第三周学习总结 教材学习内容总结-第四章 类与对象 面向对象语言 需要完成某种任务时,首先要想到,谁去完成任务,即哪个对象去完 ...
- HDOJ(HDU).2191. 悼念512汶川大地震遇难同胞――珍惜现在,感恩生活 (DP 多重背包+二进制优化)
HDOJ(HDU).2191. 悼念512汶川大地震遇难同胞――珍惜现在,感恩生活 (DP 多重背包+二进制优化) 题意分析 首先C表示测试数据的组数,然后给出经费的金额和大米的种类.接着是每袋大米的 ...
- 【贪心】【P2117】小Z的矩阵
传送门 Description 小Z最近迷上了矩阵,他定义了一个对于一种特殊矩阵的特征函数G.对于N*N的矩阵A,A的所有元素均为0或1, 当然询问一个矩阵的G值实在是太简单了.小Z在给出一个N*N矩 ...
- jq的each理解
1种 通过each遍历li 可以获得所有li的内容 <!-- 1种 --> <ul class="one"> <li>11a</li> ...
- angularJS前端分页插件
首先在项目中引入 分页插件的 js 和 css: 在html页面引入 相关js 和 css: 在控制器中引入分页插件中定义的 module[可以打开pagination.js查看,可以看到 其实,在插 ...
- 【Android开发】范例1-绘制Android的机器人
下面这个实例通过前面学过的Paint.Canvas等2D绘画技术来实现在手机屏幕上绘制Android机器人的小实例. 具体代码实现和效果: 用来显示自定义的绘图类的布局文件 res/layout/ma ...
- 从samsung提供内核进行移植
1.尝试编译分析结果 配置编译下载尝试 (1)检查Makefile中ARCH和CROSS_COMPILE(2)make xx_defconfig(3)make menuconfig(4)make -j ...
- Java并发之同步原语
volatile: 定义:Java编程语言允许线程访问共享变量,为了确保共享变量内被准确和一致性地更新,线程应该确保通过排它锁单独获得这个变量.根据volatile的定义,volatile有锁的语义. ...
- [freemarker篇]05.关于集合的遍历
人啊,有的时候就是没有办法坚持一些事情,总是因为各种理由在推脱,逐渐就变成了拖延症!例如胖先生的减肥计划,其实本来就没有计划,属于散漫形式的!一直减肥,一直在肥!总是说没有时间,没有时间!其实有时候就 ...
- [cerc2012][Gym100624A]20181013
A 题意:n(n<=20)个国家,每个国家之间有一些债务关系,总体为负债的国家会破产,破产国家的债务关系全部消除.问哪些国家可能成为最后一个唯一存在的国家. 题解: 对于每一个状态,面对若干个负 ...