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实例文档反向 ...
随机推荐
- HDU2089:不要62——题解
http://acm.hdu.edu.cn/showproblem.php?pid=2089 Problem Description 杭州人称那些傻乎乎粘嗒嗒的人为62(音:laoer). 杭州交通管 ...
- AOJ.865 青铜莲花池 (BFS)
AOJ.865 青铜莲花池 (BFS) 题意分析 典型的BFS 没的说 代码总览 #include <iostream> #include <cstdio> #include ...
- atom的快捷键,你hold住吗?
命令面板:Ctrl+Shift+P设置窗口:Ctrl+,另存为: Ctrl+Shift+S添加文件:Ctrl+O添加文件夹:Ctrl+Alt+O工程内查找 :Cmd+Shift+F a,m,delet ...
- VC使用sqlite
SQLite可以到官方站点(http://www.sqlite.org/download.html)下载:Linux,Mac OS X, Windows下的已编译文件以及源代码.帮助文档. SQLit ...
- bzoj 2434 [Noi2011]阿狸的打字机 AC自动机
[Noi2011]阿狸的打字机 Time Limit: 10 Sec Memory Limit: 256 MBSubmit: 4001 Solved: 2198[Submit][Status][D ...
- HDU2686 费用流 模板
Matrix Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Subm ...
- cssText基本使用及注意事项
一.cssText之起步 那些年,我们是这样设置样式的: xxx.style.width = "233px"; xxx.style.position = "fixed&q ...
- Java并发多线程 - 并发工具类JUC
安全共享对象策略 1.线程限制 : 一个被线程限制的对象,由线程独占,并且只能被占有它的线程修改 2.共享只读 : 一个共享只读的对象,在没有额外同步的情况下,可以被多个线程并发访问, 但是任何线程都 ...
- SpringMVC中ModelAndView addObject()设置的值jsp取不到的问题
controller public class HelloWorldController implements Controller { public ModelAndView handleReque ...
- [Luogu 2590] ZJOI2008 树的统计
[Luogu 2590] ZJOI2008 树的统计 裸树剖不解释. 比板子还简单. #include <algorithm> #include <cstdio> #inclu ...