Xml

qq_42047072 2018-11-21 02:51:50
Xml > extendsible markup language 可扩展的标记语言 Xml有什么用: 1.可以用来保存数据 2.可以用来做配置文件 3.数据传输载体 文档声明: <?xml version="1.0" encoding="gbk" standalone="no" ?> version:使用什么版本 encoding:使用什么编码来翻译 standalone: no 该文档会依赖关联文档 yes 不会依赖 encoding详解 要保证保存文件的时候的编码和设置代码编码的encoding一致. 注意: 电脑本地保存的文件的ANSI,对应的是本地编码GBK 为了通用,建议使用UTF-8编码保存,以及encoding都是utf-8; XML中的标签: XML命名规范: 可以含字母,数字,以及其他字符 不能以数字或者标点符号开始 名称不能以字符'xml'开始 名称不能包含空格 XML注释: 不允许放置在文档的第一行. CDATA区: 非法字符:严格地讲,在 XML 中仅有字符 "<"和"&" 是非法的。省略号、引号和大于号是合法的,但是把它们替换为实体引用是个好的习惯。 < < & & 如果某字符串中包含了类似标签或者关键字的文字,不想让XML解析,那么使用CDATA. <des><![CDATA[<a href="http://www.baidu.com">我爱丫丫</a>]]></des> Xml解析: 获取其中元素的字符数据或者属性数据 常用的两种Xml解析器: DOM SAX Dom4j 基本用法: element.element("stu"); :返回该元素下第一个stu元素 element.elements("stu"); :返回该元素下的所有子元素 1.创建SaxReader对象 2.指定解析的Xml文件 3.获取根元素 4.根据根元素获取子元素或者下面的子孙元素 try{ //1.创建sax读取对象 SAXReader reader = new SAXReader(); //指定解析的xml源 Document document = reader.read(new File("src/xml/stus.xml")); //3.得到元素 //得到根元素 Element rootElement = document.getRootElement(); //获取根元素下面的子元素 rootElement.element("age"); System.out.println(rootElement.element("stu").element("age").getText()); //获取根元素下面的所有子元素 List<Element> elements = rootElement.elements(); //遍历所有的元素 for(Element element : elements){ //获取stu元素下面的name元素 String name = element.element("name").getText(); String age = element.element("age").getText(); String address = element.element("address").getText(); System.out.println("name="+name+"==age+"+age+"==address="+address); } }catch(Excption e){ e.printStackTrace(); } ###Dom4j 的 Xpath使用 > dom4j里面支持Xpath的写法。 xpath其实是xml的路径语言,支持我们在解析xml的时候,能够快速的定位到具体的某一个元素。 1. 添加jar包依赖 jaxen-1.1-beta-6.jar 2. 在查找指定节点的时候,根据XPath语法规则来查找 3. 后续的代码与以前的解析代码一样。 DTD: 语法自成一派,可读性差. 1. 引入网络上的DTD <!-- 引入dtd 来约束这个xml --> <!-- 文档类型 根标签名字 网络上的dtd dtd的名称 dtd的路径 <!DOCTYPE stus PUBLIC "//UNKNOWN/" "unknown.dtd"> --> 2. 引入本地的DTD <!-- 引入本地的DTD : 根标签名字 引入本地的DTD dtd的位置 --> <!-- <!DOCTYPE stus SYSTEM "stus.dtd"> --> 2.直接在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> 元素的个数: + 一个或者多个 * 零个或多个 ? 零个或一个 属性的类型定义 CDATA: 属性是普通文字 ID: 属性的值必须唯一 Schema: 其实就是一个xml.使用xml的规则,解析器解析更方便,是为了代替DTD,但是约束内容太多. 约束文档: <!-- xmlns : xml namespace : 名称空间 / 命名空间 targetNamespace : 目标名称空间 。 下面定义的那些元素都与这个名称空间绑定上。 elementFormDefault : 元素的格式化情况。 --> <schema xmlns="http://www.w3.org/2001/XMLSchema" targetNamespace="http://www.itheima.com/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 可以引用多个schema约束。 但是只能引用一个DTD约束。 名称空间的作用就是在 写元素的时候,可以指定该元素使用的是哪一套约束规则。 默认情况下 ,如果只有一套规则,那么都可以这么写 <name>张三</name> <aa:name></aa:name> <bb:name></bb:name>
...全文
81 回复 打赏 收藏 转发到动态 举报
写回复
用AI写文章
回复
切换为时间正序
请发表友善的回复…
发表回复

23,404

社区成员

发帖
与我相关
我的任务
社区描述
Java 非技术区
社区管理员
  • 非技术区社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧