xml 笔记
来源:互联网 发布:matlab智能算法有哪些 编辑:程序博客网 时间:2024/06/05 04:31
xml是什么
XML:eXtensible Markup Language 可扩展标记语言 version=”1.0”
* 可扩展:所有的标签都是自定义的。 * 功能:数据存储 * 配置文件 * 数据传输* html与xml区别: * html语法松散,xml语法严格 * html做页面展示,xml做数据存储 * html所有标签都是预定义的,xml所有标签都是自定义的W3C:word wide web consortiem 万维网联盟xml语法: * 文档声明: * 必须写在xml文档的第一行。 * 写法:<?xml version="1.0" ?> * 属性: * version:版本号 固定值 1.0 * encoding:指定文档的码表。默认值为 iso-8859-1 * standalone:指定文档是否独立 yes 或 no * 元素:xml文档中的标签 ** 文档中必须有且只能有一个根元素 * 元素需要正确闭合。<body></body> <br/> * 元素需要正确嵌套 * 元素名称要遵守: * 元素名称区分大小写 * 数字不能开头 * 文本: * 转义字符:> * CDATA: 里边的数据会原样显示 * <![CDATA[ 数据内容 ]]> * 属性: * 属性值必须用引号引起来。单双引号都行 * 注释: <!-- --> * 处理指令:现在基本不用 <?xml-stylesheet type="text/css" href="1.css"?>
<?xml version="1.0" encoding="UTF-8"?><books> <book> <name>窝在角落里好安心</name> <price>¥30</price> </book> <book> <name>一个人的好天气</name> <price>¥30</price> <![CDATA[ <h1>好看</h1> ]]> </book></books>
<?xml version="1.0" encoding="UTF-8"?><书架> <书 出版时间="2017-08-10"> <书名>白夜行</书名> <作者>东野圭吾</作者> <单价>¥50</单价> </书> <书 出版时间="2017-08-10"> <书名>解忧杂货店</书名> <作者>东野圭吾</作者> <单价>¥50</单价> </书></书架>
xml约束:
* 约束就是xml的书写规则 * 约束的分类: dtd: dtd分类: * 内部dtd:在xml内部定义dtd * 外部dtd:在外部文件中定义dtd * 本地dtd文件:<!DOCTYPE students SYSTEM "student.dtd"> * 网络dtd文件:<!DOCTYPE students PUBLIC "名称空间" "student.dtd"> schema: 导入xsd约束文档: 1、编写根标签 2、引入实例名称空间 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 3、引入名称空间 xsi:schemaLocation="http://www.itcast.cn/xml student.xsd" 4、引入默认的名称空间
DTD约束
student.xml
<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE students SYSTEM "student.dtd"><students> <student std="s1"> <name>鹿晗</name> <age>27</age> <sex>male</sex> </student> <student std="s2"> <name>小晗</name> <age>18</age> <sex>female</sex> </student></students>
student.dtd
<!ELEMENT students (student*) ><!--students标签下可以有0个或多个student--><!ELEMENT student (name,age,sex)><!ELEMENT name (#PCDATA)><!--可理解成字符串--><!ELEMENT age (#PCDATA)><!ELEMENT sex (#PCDATA)><!ATTLIST student std ID #REQUIRED><!--属性std ID必须唯一且不能为空-->
schema约束
student.xml
<?xml version="1.0" encoding="UTF-8" ?><!-- 1、编写根标签 2、引入实例名称空间 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 3、引入名称空间 xsi:schemaLocation="http://www.alltowell.cn/xml student.xsd" 4、引入默认的名称空间 --><students xmlns="http://www.alltowell.cn/xml" xsi:schemaLocation="http://www.alltowell.cn/xml student.xsd" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> <student std="20140001"> <name>鹿晗</name> <age>27</age> <sex>male</sex> </student> <student std="20140001"> <name>小晗</name> <age>18</age> <sex>female</sex> </student></students>
student.xsd
<?xml version="1.0"?><xsd:schema xmlns="http://www.alltowell.cn/xml" xmlns:xsd="http://www.w3.org/2001/XMLSchema" targetNamespace="http://www.alltowell.cn/xml" elementFormDefault="qualified"> <xsd:element name="students" type="studentsType"/> <xsd:complexType name="studentsType"> <xsd:sequence> <!-- 0个或多个student --> <xsd:element name="student" type="studentType" minOccurs="0" maxOccurs="unbounded"/> </xsd:sequence> </xsd:complexType> <xsd:complexType name="studentType"> <xsd:sequence> <!-- xsd:string :万维网联盟 ageType:自定义 --> <xsd:element name="name" type="xsd:string"/> <xsd:element name="age" type="ageType" /> <xsd:element name="sex" type="sexType" /> </xsd:sequence> <xsd:attribute name="std" type="numberType" use="required"/> </xsd:complexType> <xsd:simpleType name="sexType"> <xsd:restriction base="xsd:string"> <xsd:enumeration value="male"/> <xsd:enumeration value="female"/> </xsd:restriction> </xsd:simpleType> <xsd:simpleType name="ageType"> <xsd:restriction base="xsd:integer"> <xsd:minInclusive value="0"/> <xsd:maxInclusive value="256"/> </xsd:restriction> </xsd:simpleType> <xsd:simpleType name="numberType"> <xsd:restriction base="xsd:string"> <xsd:pattern value="2014\d{4}"/> </xsd:restriction> </xsd:simpleType></xsd:schema>
XML解析:
* 解析xml可以做: * 如果xml作为配置文件:读取 * 如果xml作为传输文件:写,读* xml解析思想: * DOM:将文档加载进内存,形成一颗dom树(document对象),将文档的各个组成部分封装为一些对象。 * 优点:因为,在内存中会形成dom树,可以对dom树进行增删改查。 * 缺点:dom树非常占内存,解析速度慢。 Document Element Text Attribute Comment * SAX:逐行读取,基于事件驱动 * 优点:不占内存,速度快 * 缺点:只能读取,不能回写* xml常用的解析器: * JAXP:sun公司提供的解析。支持dom和sax。 * JDOM: * DOM4J:dom for java民间方式,但是是事实方式。非常好。 支持dom 1.导入jar包 dom4j.jar 2.创建解析器 SAXReader reader = new SAXReader(); 3.解析xml 获得document对象 Document document = reader.read(url); * XPATH:专门用于查询 * 定义了一种规则。 * 使用的方法: * selectSingleNode(): * selectNodes(): 使用步骤: 1、注意:要导包 jaxen...jar 2、创建解析器 SAXReader reader = new SAXReader(); 3、解析xml 获得document对象 Document document = reader.read(url);* 解析XML: // 1、得到某个具体的节点内容:第2本书的书名--》葵花宝典 // 2、遍历所有元素节点XPath: // nodename 选取此节点。 // / 从根节点选取。 // // 从匹配选择的当前节点选择文档中的节点,而不考虑它们的位置。 // .. 选取当前节点的父节点。 // @ 选取属性。 // [@属性名] 属性过滤 // [标签名] 子元素过滤 DOM4J解析:导入包dom4j-1.6.1.jar
books.xml
<?xml version="1.0" encoding="UTF-8"?><书架> <书 出版时间="2017-08-10"> <书名>白夜行</书名> <作者>东野圭吾</作者> <单价>¥50</单价> </书> <书 出版时间="2017-08-10"> <书名>解忧杂货店</书名> <作者>东野圭吾</作者> <单价>¥50</单价> </书></书架>
TestDom4j.java
package com.dgut.edu.dom4j;import java.util.List;import org.dom4j.Document;import org.dom4j.DocumentException;import org.dom4j.Element;import org.dom4j.Node;import org.dom4j.io.SAXReader;import org.junit.Test;public class TestDom4j { //得到某个具体的节点内容:第2本书的书名 @Test public void test1() throws DocumentException{ SAXReader reader = new SAXReader();//创建一个xml解析对象 Document document =reader.read("src/books.xml");//把xml文档加载到document对象中 Element root = document.getRootElement();// Element bookNode = root.element("书");// System.out.println(bookNode.getName()); List list =root.elements();//得到当前节点的所有子节点 Element secondBook=(Element) list.get(1);//得到第二本书对象 String name=secondBook.element("书名").getText();//得到当前节点的文本内容 System.out.println(name); } //遍历所有的节点元素 @Test public void test2() throws DocumentException{ SAXReader reader = new SAXReader();//创建一个xml解析对象 Document document = reader.read("src/books.xml");//把xml文档加载到document对象中 Element root=document.getRootElement(); treeWalk(root); } private void treeWalk(Element ele) { System.out.println(ele.getName());//输出当前节点的名字 for(int i=0;i<ele.nodeCount();i++){//ele.nodeCount()得到当前节点的所以普子节点的数量 Node node=ele.node(i);//取出下标为i的节点 if(node instanceof Element){//判断当前节点是否为标签 treeWalk((Element)node);//把node强转为标签(Element) }else{ System.out.println(node.getText()); } } }}
XPATH解析:导入包dom4j-1.6.1.jar,导入jaxen-1.1-beta-6.jar,
TestXPath.java
package com.dgut.edu.dom4j;import java.util.List;import org.dom4j.Document;import org.dom4j.DocumentException;import org.dom4j.Node;import org.dom4j.io.SAXReader;import org.junit.Test;public class TestXPath { //得到某个具体的节点内容:第2本书的书名 @Test public void test() throws Exception{ SAXReader read = new SAXReader(); Document document=read.read("src/books.xml"); Node node =document.selectSingleNode("/书架/书[2]/书名"); System.out.println(node.getText()); } //遍历所有的节点元素 @Test public void test2() throws Exception{ SAXReader read = new SAXReader(); Document document=read.read("src/books.xml"); List list=document.selectNodes("//*"); for(int i=0;i<list.size();i++){ Node node=(Node)list.get(i); System.out.println(node.getName()+"\t"+node.getText());; } } //输出所有书名 @Test public void test3() throws Exception{ SAXReader read = new SAXReader(); Document document = read.read("src/books.xml"); List nodes = document.selectNodes("/书架//书/书名"); for (int i = 0; i < nodes.size(); i++) { Node node = (Node) nodes.get(i); System.out.println(node.getText()); } }}
阅读全文
0 0
- XML笔记-XML基础
- XML笔记
- xml笔记
- xml笔记
- XML笔记
- xml笔记
- XML笔记
- XML笔记
- XML笔记
- XML笔记
- xml 笔记
- xml笔记
- xml笔记
- xml笔记
- XML笔记
- XML 笔记
- XML 笔记
- XML笔记
- es & kibana & filebeat 部署与使用
- 基于 JavaScript 实现玫瑰花
- CF 558E 线段树
- Java Annotation认知(包括框架图、详细介绍、示例说明)
- 价值巨款的安卓兼容性分享
- xml 笔记
- html仿android的Toast功能:自定义淡出提示框
- 生产者/消费者问题的多种Java实现方式
- 手动更新gradle
- eclipse 异常断点和条件断点
- mybatis在xml文件中处理大于号小于号的方法
- Android发送权限受限的广播,指定接受方!
- 机器学习的分类及各自特点
- 彻底删除R Studio残留数据,全新重装R