网站开发 企业 定制系统,徐州网站建设公司官网,石家庄网站建设找哪家,成都网站建设 四川冠辰文章目录1.xml1.1概述【理解】(不用看)1.2标签的规则【应用】1.3语法规则【应用】1.4xml解析【应用】1.5DTD约束【理解】1.5.1 引入DTD约束的三种方法1.5.2 DTD语法#xff08;会阅读#xff0c;然后根据约束来写#xff09;1.6 schema约束【理解】1.6.1 编写schema约束1.6.…
文章目录1.xml1.1概述【理解】(不用看)1.2标签的规则【应用】1.3语法规则【应用】1.4xml解析【应用】1.5DTD约束【理解】1.5.1 引入DTD约束的三种方法1.5.2 DTD语法会阅读然后根据约束来写1.6 schema约束【理解】1.6.1 编写schema约束1.6.2 引入schema约束properties文件变量名指定定义一个多个对象全路径名时不方便阅读 xml就方便许多了对配置有自己的一套语法格式很健全很强大实用 1.xml
1.1概述【理解】(不用看) 万维网联盟(W3C) 万维网联盟(W3C)创建于1994年又称W3C理事会。1994年10月在麻省理工学院计算机科学实验室成立。 建立者 Tim Berners-Lee (蒂姆·伯纳斯·李)。 是Web技术领域最具权威和影响力的国际中立性技术标准机构。 到目前为止W3C已发布了200多项影响深远的Web技术标准及实施指南 如广为业界采用的超文本标记语言HTML标准通用标记语言下的一个应用、 可扩展标记语言XML标准通用标记语言下的一个子集 以及帮助残障人士有效获得Web信息的无障碍指南WCAG等 xml概述 XML的全称为(EXtensible Markup Language)是一种可扩展的标记语言 标记语言: 通过标签来描述数据的一门语言(标签有时我们也将其称之为元素) 可扩展标签的名字是可以自定义的,XML文件是由很多标签组成的,而标签名是可以自定义的 作用 用于进行存储数据和传输数据作为软件的配置文件 作为配置文件的优势 可读性好可维护性高
1.2标签的规则【应用】 标签由一对尖括号和合法标识符组成 student标签必须成对出现 student /student
前边的是开始标签后边的是结束标签特殊的标签可以不成对,但是必须有结束标记 address/标签中可以定义属性,属性和标签名空格隔开,属性值必须用引号引起来 student id1 /student标签需要正确的嵌套 这是正确的: student id1 name张三/name /student
这是错误的: student id1name张三/student/name1.3语法规则【应用】 语法规则 XML文件的后缀名为xml 文档声明必须是第一行第一列 ?xml version“1.0” encoding“UTF-8” standalone“yes”? version该属性是必须存在的 (值也固定1.0吧 不要写别的) encoding该属性不是必须的 打开当前xml文件的时候应该是使用什么字符编码表(一般取值都是UTF-8) standalone: 该属性不是必须的描述XML文件是否依赖其他的xml文件取值为yes/no 必须存在一个根标签有且只能有一个 XML文件中可以定义注释信息 XML文件中可以存在以下特殊字符 lt; 小于
gt; 大于
amp; 和号
apos; 单引号
quot; 引号XML文件中可以存在CDATA区 ![CDATA[ …内容… ]] 示例代码
?xml version1.0 encodingUTF-8 ?
!--文档声明必须第一行第一列 上面连空格 空行都不能有--students !--根标签 有且只能有一个--!--学生1 通过id区分是哪个学生--student id1name张三/nameage23/ageinfo张三信息[特殊字符:小于:lt; 大于:gt; 且:amp; 单引号:apos; 双引号:quot;]/infomessage![CDATA[直接用CDATA域: 这里的所有东西都当做简简单单的文本不会被转义 ]]/message/student!--学生2 id2--student id2name李四/nameage24/age/student/students
1.4xml解析【应用】 概述 xml解析就是从xml中获取到数据 常见的解析思想 DOM(Document Object Model)文档对象模型:就是把文档的各个组成部分看做成对应的对象。 会把xml文件全部加载到内存,在内存中形成一个树形结构,再获取对应的值 常见的解析工具 JAXP: SUN公司提供的一套XML的解析的APIJDOM: 开源组织提供了一套XML的解析的API-jdomDOM4J: 开源组织提供了一套XML的解析的API-dom4j,全称Dom For Javapull: 主要应用在Android手机端解析XML 解析的准备工作 我们可以通过网站https://dom4j.github.io/ 去下载dom4j 今天的资料中已经提供,我们不用再单独下载了,直接使用即可 将提供好的dom4j-1.6.1.zip解压,找到里面的dom4j-1.6.1.jar 在idea中当前模块下新建一个libs文件夹,将jar包复制到文件夹中 选中jar包 - 右键 - 选择add as library即可 需求 解析提供好的xml文件将解析到的数据封装到学生对象中并将学生对象存储到ArrayList集合中遍历集合 代码实现
注意新建目录复制好jar包之后得右键导入一下才能使用 导入成功后就可以展开了
student.xml
?xml version1.0 encodingUTF-8 ?
students !--学生1 通过id区分是哪个学生--student id1name张三/nameage23/age/student!--学生2 id2--student id2name李四/nameage24/age/student
/studentsStudent.java
public class Student {private String id;private String name;private int age;//全参构造无参构造set/get, toString\
}XmlParse.java
/*** 利用dom4j解析xml文件*/
public class XmlParse {public static void main(String[] args) throws Exception {//1.获取Document对象//1.1先得获取一个解析器对象(SAXReader)SAXReader saxReader new SAXReader();//1.2利用解析器把xml文件加载到内存中,并返回一个文档对象(Document对象)Document document saxReader.read(new File(myxml/xml/student.xml));//2.逐步获取标签对象//2.1 获取根标签Element rootElement document.getRootElement();//2.2 通过根标签获取Student标签//方法1elements(),返回调用者所有子标签,放在一个List中/*List list rootElement.elements();System.out.println(list.size());//3 不仅student,连aaa也都获取到了*///方法2★ elements(标签名),返回调用者所有指定名称子标签,放在一个List中/*List list rootElement.elements(student);System.out.println(list.size());//2 只有所有student了*/ListElement studentElements rootElement.elements(student);//用来装学生对象ArrayListStudent list new ArrayList();//2.3 遍历集合得每一个student标签for (Element studentElement : studentElements) {// 2.4 继续读取每一个student子标签以及属性//2.4.1 获取id属性以及其值Attribute attribute studentElement.attribute(id);//获取id属性String id attribute.getValue();//获取id属性值//2.4.2 获取各个子标签 以及其值(标签体内容)//element(标签名): 获取调用者指定子标签(单个)Element nameElement studentElement.element(name);//name标签String name nameElement.getText();//name标签体内容(需要的值)Element ageElement studentElement.element(age);String age ageElement.getText();//3. 最后根据获取到的值 封装对象了//System.out.println(id name age);Student stu new Student(id, name, Integer.parseInt(age));list.add(stu);}System.out.println(list);}}1.5DTD约束【理解】 什么是约束 用来限定xml文件中可使用的标签以及属性 约束的分类 DTDschema 编写DTD约束 步骤 创建一个文件这个文件的后缀名为.dtd 看xml文件中使用了哪些元素 !ELEMENT 可以定义元素 判断元素是简单元素还是复杂元素 简单元素没有子元素。 复杂元素有子元素的元素 代码实现
persondtd.dtd
!ELEMENT persons (person)
!ELEMENT person (name,age)
!ELEMENT name (#PCDATA)
!ELEMENT age (#PCDATA)person.xml
?xml version1.0 encodingUTF-8 ?
!DOCTYPE persons SYSTEM persondtd.dtd
!--persons根标签 SYSTEM表示引入本地约束--!--引入之后再编写也有提示了--
personspersonname张三/nameage18/age/person
/persons1.5.1 引入DTD约束的三种方法
引入本地dtd !DOCTYPE 根元素名称 SYSTEM ‘DTD文件的路径在xml文件内部引入 !DOCTYPE 根元素名称 [ dtd文件内容 ]引入网络dtd !DOCTYPE 根元素的名称 PUBLIC DTD文件名称 DTD文档的URL代码实现 引入本地DTD约束 !DOCTYPE 根元素名称 SYSTEM ‘DTD文件的路径persondtd.dtd !ELEMENT persons (person)
!ELEMENT person (name,age)
!ELEMENT name (#PCDATA)
!ELEMENT age (#PCDATA)person1.xml ?xml version1.0 encodingUTF-8 ?
!DOCTYPE persons SYSTEM persondtd.dtd
!--方法1引入本地约束--personspersonname张三/nameage18/age/person
/persons在xml文件内部引入 !DOCTYPE 根元素名称 [ dtd文件内容 ]person2.xml ?xml version1.0 encodingUTF-8 ?
!DOCTYPE persons [!ELEMENT persons (person)!ELEMENT person (name,age)!ELEMENT name (#PCDATA)!ELEMENT age (#PCDATA)]
!--方法2xml文件内部引入约束--personspersonname张三/nameage18/age/person
/persons 引入网络dtd !DOCTYPE 根元素的名称 PUBLIC DTD文件名称 DTD文档的URL暂时了解 后面使用
1.5.2 DTD语法会阅读然后根据约束来写 定义元素 定义一个元素的格式为!ELEMENT 元素名 元素类型 简单元素 EMPTY: 表示标签体为空 ANY: 表示标签体可以为空也可以不为空 PCDATA: 表示该元素的内容部分为字符串 复杂元素 直接写子元素名称. 多个子元素可以使用,“或者”|隔开 ,表示定义子元素的顺序 ; “|”: 表示子元素只能出现任意一个 ?零次或一次, 一次或多次, *零次或多次;如果不写则表示出现一次 不限制个数就是只能写一次 定义属性 格式 定义一个属性的格式为!ATTLIST 元素名称 属性名称 属性的类型 属性的约束 属性的类型 CDATA类型普通的字符串 属性的约束: // #REQUIRED 必须的 // #IMPLIED 属性不是必需的 // #FIXED value属性值是固定的 代码实现 代码实现 !ELEMENT persons (person)
!--person 1个或多个 person 只能写一个--
!ELEMENT person (name,age)
!ELEMENT name (#PCDATA)
!ELEMENT age (#PCDATA)
!ATTLIST person id CDATA #REQUIRED
!ATTLIST name id CDATA #FIXED p1 !-- 属性值定死为name了 --?xml version1.0 encodingUTF-8 ?
!DOCTYPE persons SYSTEM persondtd.dtdpersonsperson id001name张三/nameage23/age/personperson id 002name张三/nameage23/age/person/persons1.6 schema约束【理解】 schema和dtd的区别 schema约束文件也是一个xml文件符合xml的语法这个文件的后缀名.xsd一个xml中可以引用多个schema约束文件多个schema使用名称空间区分名称空间类似于java包名dtd里面元素类型的取值比较单一常见的是PCDATA类型但是在schema里面可以支持很多个数据类型schema 语法更加的复杂
1.6.1 编写schema约束 步骤 1创建一个文件这个文件的后缀名为.xsd。 2定义文档声明 3schema文件的根标签为 schema 4在schema中定义属性 xmlnshttp://www.w3.org/2001/XMLSchema 5在schema中定义属性 targetNamespace 唯一的url地址指定当前这个schema文件的名称空间。 6在schema中定义属性 elementFormDefaultqualified“表示当前schema文件是一个质量良好的文件。 7通过element定义元素 8判断当前元素是简单元素还是复杂元素 代码实现 person.xsd ?xml version1.0 encodingUTF-8 ?
!--根标签有三个固定属性--
schemaxmlnshttp://www.w3.org/2001/XMLSchematargetNamespacehttp://www.whu.cn/javaseelementFormDefaultqualified
!--定义persons复杂元素--element namepersonscomplexType!--sequence表示子标签必须按顺序来--sequence!--定义person复杂元素--element namepersoncomplexTypesequence!--定义name和age简单元素--element namename typestring/elementelement nameage typestring/element/sequence/complexType/element/sequence/complexType/element/schema1.6.2 引入schema约束 步骤 1在根标签上定义属性xmlns“http://www.w3.org/2001/XMLSchema-instance” 2通过xmlns引入约束文件的名称空间 3给某一个xmlns属性添加一个标识用于区分不同的名称空间 格式为: xmlns:标识“名称空间地址” ,标识可以是任意的但是一般取值都是xsi 4通过xsi:schemaLocation指定名称空间所对应的约束文件路径 格式为xsi:schemaLocation 名称空间url 文件路径“ 代码实现