XML语法与解析
来源:互联网 发布:网络设计收获与体会 编辑:程序博客网 时间:2024/05/29 18:17
* 可扩展:所有的标签都是自定义的。
* 功能:数据存储
* 配置文件
* 数据传输
* 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约束:
* 约束就是xml的书写规则
* 约束的分类:
dtd:
dtd分类:
* 内部dtd:在xml内部定义dtd
* 外部dtd:在外部文件中定义dtd
* 本地dtd文件:<!DOCTYPE students SYSTEM "student.dtd">
* 网络dtd文件:<!DOCTYPE students PUBLIC "名称空间" "student.dtd">
student.dtd
<!ELEMENT students (student*) >
<!ELEMENT student (name,age,sex)>
<!ELEMENT name (#PCDATA)>
<!ELEMENT age (#PCDATA)>
<!ELEMENT sex (#PCDATA)>
<!ATTLIST student number ID #REQUIRED>
student.xml
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE students SYSTEM "student.dtd">
<students>
<student number="s0001" >
<name>zs</name>
<age>abc</age>
<sex>yao</sex>
</student>
</students>
导入xsd约束文档:
1、编写根标签
2、引入实例名称空间 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
3、引入名称空间 xsi:schemaLocation="http://www.itcast.cn/xml student.xsd"
4、引入默认的名称空间
student.xsd
<?xml version="1.0"?>
<xsd:schema xmlns="http://www.itheima.cn/xml"
xmlns:xsd="http://www.w3.org/2001/XMLSchema"
targetNamespace="http://www.itheima.cn/xml" elementFormDefault="qualified">
<xsd:element name="students" type="studentsType"/>
<xsd:complexType name="studentsType">
<xsd:sequence>
<xsd:element name="student" type="studentType" minOccurs="0" maxOccurs="unbounded"/>
</xsd:sequence>
</xsd:complexType>
<xsd:complexType name="studentType">
<xsd:sequence>
<xsd:element name="name" type="xsd:string"/>
<xsd:element name="age" type="ageType" />
<xsd:element name="sex" type="sexType" />
</xsd:sequence>
<xsd:attribute name="number" 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="itheima_\d{4}"/>
</xsd:restriction>
</xsd:simpleType>
</xsd: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.itcast.cn/xml student.xsd"
4、引入默认的名称空间
-->
<students
xmlns="http://www.itheima.cn/xml"
xsi:schemaLocation="http://www.itheima.cn/xml student.xsd"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
>
<student number="itheima_1001">
<name>asfd</name>
<age>12</age>
<sex>male</sex>
</student>
</students>
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、遍历所有元素节点
XPath:
// nodename 选取此节点。
// /从根节点选取。
// //从匹配选择的当前节点选择文档中的节点,而不考虑它们的位置。
// ..选取当前节点的父节点。
// @选取属性。
// [@属性名] 属性过滤
// [标签名] 子元素过滤
Book.xml
<?xml version="1.0" encoding="UTF-8"?>
<书架>
<书 出版社="北京">
<书名>Java</书名>
<作者>李刚</作者>
<单价>10</单价>
<批发价>20</批发价>
</书>
<书>
<书名>Strut2</书名>
<作者李刚</作者>
<单价>10</单价>
</书>
</书架>
TestDom4j.java
package com.itheima.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 {
@Test// 1、得到某个具体的节点内容:第2本书的书名
public void test1() throws DocumentException{
SAXReader reader = new SAXReader();//创建一个xml解析对象
Document document = reader.read("src/Book.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 // 2、遍历所有元素节点
public void test2() throws DocumentException{
SAXReader reader = new SAXReader();//创建一个xml解析对象
Document document = reader.read("src/Book.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());
}
}
}
}
TestXPath.java
package com.itheima.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 {
@Test
public void test() throws Exception{
SAXReader read = new SAXReader();
Document document = read.read("src/Book.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/Book.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());
}
}
}
- XML语法与解析
- XML语法 XML解析
- XML语法 、 XML解析
- 12-002-1 XML基本语法与解析
- XML的语法和解析
- XML与XML解析
- XML概述与语法
- XML概述与语法
- xml简介与语法
- SE02 Unit07 XML语法 、 XML解析
- XML解析与XML拼接
- XML语言基础与语法
- XML解析 与 JSON 解析
- xml解析生成与解析
- php中xml语法解析总结
- GTK XML语法解析器开发
- XML 的组成语法及解析
- DOM对XML的语法解析器
- 26、C#里面标签的属性和事件
- Cabric Number Problem
- 排序 算法
- MySQL day8---MySQL存储引擎
- js中的this
- XML语法与解析
- Python 微分方程组 稳定性分析
- android GreenDao 数据库升级特殊字段处理
- Python
- TortoiseGit配置
- StringTokenizer类的使用方法
- 微信扫码支付
- Linux(8)
- 改变图像的灰度值后显示图像