一、 XML是一种可扩展的标记语言
二、 XML设计的宗旨是用来传输数据的不是用来显示数据的
三、 XML具备自我描述性,并无固定的标签,都由本身来自定义,XML的标签较为严格,不容许有错。
四、 XML遵循w3c标准。
五、 XML的用途: 数据存储、数据传输、配置文件。
复制代码
<?xml version="1.0" encoding="UTF-8"?> <!-- 文档申明 -->
// 版本号 + 编码方式
// 该句话必须放置在第一行
复制代码
一、 标签必须闭合
二、 必须有跟元素包裹
三、 标签闭合要对应
四、 区分大小写
五、 属性要用双引号
六、 能够使用实体符号 >等
复制代码
一、 命名能够包含字母、数字、符号
二、 不能以数字和符号开头
三、 名称不能包含空格
四、 不能以xml或XML或Xml开头
复制代码
<?xml version="1.0" encoding="UTF-8"?> <!-- 文档申明 -->
<teamp>
<person>
<name>zjj</name>
<age>22</age>
<gao>
<abc>aaa</abc>
</gao>
</person>
</teamp>
复制代码
// 原样子输出
<?xml version="1.0" encoding="UTF-8"?> <!-- 文档申明 -->
<teamp>
<person>
<name>zjj</name>
<age>22</age>
// 原样子输出
<![CDATA[
<abc>aaa</abc>
]]>
</person>
</teamp>
复制代码
<bookstore>
<book category="COOKING">
<title lang="en">Everyday Italian</title>
<author>Giada De Laurentiis</author>
<year>2005</year>
<price>30.00</price>
</book>
<book category="CHILDREN">
<title lang="en">Harry Potter</title>
<author>J K. Rowling</author>
<year>2005</year>
<price>29.99</price>
</book>
<book category="WEB">
<title lang="en">Learning XML</title>
<author>Erik T. Ray</author>
<year>2003</year>
<price>39.95</price>
</book>
</bookstore>
复制代码
规定文档中只能些哪些标签,会报错提示。php
- DTD约束
- 本地dtd <!DOCTYPE root SYSTEM "student.dtd">
- 引用网络dtd <!DOCTYPE root PUBLIC "//UNKNOWN/" "unknown.dtd">
- Schema
- 为何要使用schema,由于若是咱们想要控制文本的类型,dtd就显得很差实现了,因此咱们使用了shcema,schema有dtd的功能,还能实现比dtd更多的功能。
复制代码
案例1java
// student.dtd
<!ELEMENT students (student*)>
<!ELEMENT student (name, age)>
<!ELEMENT name (#PCDATA)>
<!ELEMENT age (#PCDATA)>
<!ATTLIST student number ID #REQUIRED>
复制代码
// student.xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE root SYSTEM "student.dtd">
<root>
<students>
<student number="s001">
<name>zjj</name>
<age>21</age>
</student>
</students>
<students>
<student number="s002">
<name>zjj</name>
<age>21</age>
</student>
</students>
<person>
<cat>ccc</cat>
</person>
</root>
复制代码
案例2web
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE root SYSTEM "web-app.dtd">
<root>
<web-app>
<servelt>
<servelt-name>name</servelt-name>
<servelt-class>aaaaa</servelt-class>
</servelt>
<servelt>
<servelt-name>name</servelt-name>
<servelt-class>aaaaa</servelt-class>
</servelt>
<servelt-mapping>
</servelt-mapping>
<servelt-mapping>
</servelt-mapping>
<wel-file-list>
<welcome-file>aaa</welcome-file>
</wel-file-list>
</web-app>
</root>
复制代码
<! ELEMENT web-app (servelt*, servelt-mapping*, wel-file-list?)>
<! ELEMENT servelt (servelt-name, description?, (servelt-class|jsp-file))>
<! ELEMENT servelt-name (#PCDATA)>
<! ELEMENT welcome-file-list (welcome-file+)>
复制代码
案例bash
// student.xml
<?xml version="1.0" encoding="UTF-8"?>
<!-- 开始使用的步骤: 1.编写根标签 students 2.引用约束地址 xsi:schemaLocation="默认空间 约束地址.xsd" 3.引用实例名称空间 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 4.默认名称空间 xmlns="http://www.it666.cn/xml" -->
<students xsi:schemaLocation="http://www.it666.cn/xml student.xsd" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://www.it666.cn/xml">
<student number="lk_0001">
<name>aa</name>
<age>50</age>
<sex>male</sex>
</student>
</students>
复制代码
// student.xsd
<?xml version="1.0"?>
<!-- 定义schema根元素,指定默认空间、实例名称空间等 -->
<xsd:schema xmlns="http://www.it666.cn/xml"
xmlns:xsd="http://www.w3.org/2001/XMLSchema"
targetNamespace="http://www.it666.cn/xml" elementFormDefault="qualified">
<!-- 定义一个标签(元素element) -->
<xsd:element name="students" type="studentsType"/> <!-- type为别名 -->
<!-- 定义一个标签 -->
<!-- 定义一个复杂类型(复杂标签:标签当中还有子标签) name指明了别名-->
<xsd:complexType name="studentsType">
<!-- sequence表示必须按照顺序 -->
<xsd:sequence>
<!-- students 里面能够包含student元素,能够是0个,最大是无限个 -->
<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>
<!-- 别名是studentType的标签包含的属性 -->
<!-- 名称是number,类型是numberType,必须包含 -->
<xsd:attribute name="number" type="numberType" use="required"/>
<!-- 别名是studentType的标签包含的属性 -->
</xsd:complexType>
<!-- 复杂类型 -->
<!-- =============下面指明了类型的详情============== -->
<!-- 简单类型: 简单标签(标签当中没有子标签了) -->
<!-- sex类型: 字符串、枚举 male 和 female -->
<xsd:simpleType name="sexType">
<xsd:restriction base="xsd:string">
<xsd:enumeration value="male"/>
<xsd:enumeration value="female"/>
</xsd:restriction>
</xsd:simpleType>
<!-- 简单类型 -->
<!-- 简单类型 -->
<!-- age类型:整形、最小是0,最大是256 -->
<xsd:simpleType name="ageType">
<xsd:restriction base="xsd:integer">
<xsd:minInclusive value="0"/>
<xsd:maxInclusive value="256"/>
</xsd:restriction>
</xsd:simpleType>
<!-- 简单类型 -->
<!-- 简单类型 -->
<!-- number类型:字符串、正则匹配必须正确 -->
<xsd:simpleType name="numberType">
<xsd:restriction base="xsd:string">
<xsd:pattern value="lk_\d{4}"/>
</xsd:restriction>
</xsd:simpleType>
<!-- 简单类型 -->
</xsd:schema>
复制代码
认识DOM方式网络
DOM解析app
package parse;
// 导入
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.parsers.ParserConfigurationException;
import org.w3c.dom.Document;
import org.w3c.dom.Node;
import org.w3c.dom.NodeList;
import org.xml.sax.SAXException;
import java.io.IOException;
import javax.xml.parsers.DocumentBuilder;
public class ParseClass {
public static void main(String[] args) throws ParserConfigurationException, SAXException, IOException {
// TODO Auto-generated method stub
// 一、建立解析器工厂
DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
// 二、经过解析器工厂建立解析器
DocumentBuilder db = dbf.newDocumentBuilder();
// 三、经过解析器获得文档对象
Document doc = db.parse("src/parse/student.xml");
// 四、根据节点名称得到节点
NodeList allStu = doc.getElementsByTagName("student");
// 五、获取第一个学生
Node n1 = allStu.item(0);
System.out.println(n1.getTextContent()); // zjj21
}
}
复制代码
DOM 操做dom
package parse;
import java.io.IOException;
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.parsers.ParserConfigurationException;
import javax.xml.transform.Transformer;
import javax.xml.transform.TransformerConfigurationException;
import javax.xml.transform.TransformerException;
import javax.xml.transform.TransformerFactory;
import javax.xml.transform.TransformerFactoryConfigurationError;
import javax.xml.transform.dom.DOMSource;
import javax.xml.transform.stream.StreamResult;
import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.w3c.dom.Node;
import org.w3c.dom.NodeList;
import org.xml.sax.SAXException;
public class ParseClass {
/**
* 获取节点内容
* @param doc
*/
public static void test1(Document doc) {
// 四、根据节点名称得到节点
NodeList allStu = doc.getElementsByTagName("student");
// 五、获取第一个学生
Node n1 = allStu.item(0);
System.out.println(n1.getTextContent()); // zjj21
}
/**
* 修改节点内容
* @param doc
* @throws TransformerFactoryConfigurationError
* @throws Exception
*/
public static void test2(Document doc) throws TransformerFactoryConfigurationError, Exception {
// 四、获取全部指定节点
NodeList ageList = doc.getElementsByTagName("age");
// 五、获取指定节点
Node n1 = ageList.item(0);
// 六、修改节点内容
n1.setTextContent("300");
// 七、从内从更新到文件中
Transformer tf = TransformerFactory.newInstance().newTransformer();
tf.transform(new DOMSource(doc), new StreamResult("src/parse/student.xml"));
}
/**
* 添加节点
* @param doc
* @throws TransformerFactoryConfigurationError
* @throws Exception
*/
static void test3(Document doc) throws Exception, TransformerFactoryConfigurationError {
// 建立一个元素
Element element = doc.createElement("address");
// 设置内容
element.setTextContent("address");
// 插入
Node stuNode = doc.getElementsByTagName("student").item(0);
stuNode.appendChild(element);
// 从内从更新到文件中
Transformer tf = TransformerFactory.newInstance().newTransformer();
tf.transform(new DOMSource(doc), new StreamResult("src/parse/student.xml"));
}
/**
* 删除节点
* @param doc
* @throws Exception
* @throws TransformerFactoryConfigurationError
*/
static void test4(Document doc) throws Exception, TransformerFactoryConfigurationError {
Node addressNode = doc.getElementsByTagName("address").item(0);
addressNode.getParentNode().removeChild(addressNode);
Transformer tf = TransformerFactory.newInstance().newTransformer();
tf.transform(new DOMSource(doc), new StreamResult("src/parse/student.xml"));
}
/**
* 设置属性
* @param doc
* @throws Exception
* @throws TransformerFactoryConfigurationError
*/
static void test5(Document doc) throws Exception, TransformerFactoryConfigurationError {
Node stu = doc.getElementsByTagName("student").item(1);
Element ele = (Element)stu;
ele.setAttribute("ID", "00001");
Transformer tf = TransformerFactory.newInstance().newTransformer();
tf.transform(new DOMSource(doc), new StreamResult("src/parse/student.xml"));
}
/**
* 主函数
* @param args
* @throws TransformerFactoryConfigurationError
* @throws Exception
*/
public static void main(String[] args) throws TransformerFactoryConfigurationError, Exception {
// TODO Auto-generated method stub
// 一、建立解析器工厂
DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
// 二、经过解析器工厂建立解析器
DocumentBuilder db = dbf.newDocumentBuilder();
// 三、经过解析器获得文档对象
Document doc = db.parse("src/parse/student.xml");
test1(doc);
test2(doc);
// test3(doc);
// test4(doc);
test5(doc);
}
}
复制代码
可是目前都不使用该种方法了,由于这种方法是java自带的,由sun公司推出的。yii
dom4j使用步骤:jsp
使用案例:函数
package dom4j;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.OutputStreamWriter;
import java.io.UnsupportedEncodingException;
import java.io.Writer;
import java.util.List;
import org.dom4j.Document;
import org.dom4j.DocumentException;
import org.dom4j.Element;
import org.dom4j.io.OutputFormat;
import org.dom4j.io.SAXReader;
import org.dom4j.io.XMLWriter;
public class Test {
/**
* 写入信息
* @throws Exception
* @throws FileNotFoundException
*/
static void test() throws Exception, FileNotFoundException {
// 建立解析器
SAXReader reader = new SAXReader();
Document doc = reader.read("src//dom4j//student.xml");
// 获取根元素
Element rootElement = doc.getRootElement();
// 建立元素,设置属性并添加进去
Element stuEle = rootElement.addElement("student").addAttribute("number", "a0003");
// 设置文本信息
stuEle.addElement("name").setText("zjjjj");
stuEle.addElement("age").setText("30");
stuEle.addElement("sex").setText("男");
// 格式化输出到xml文件中去
OutputFormat format = OutputFormat.createPrettyPrint();
Writer wr = new OutputStreamWriter(new FileOutputStream("src//dom4j//student.xml"),"UTF-8");
XMLWriter writer = new XMLWriter(wr, format);
writer.write( doc );
wr.close();
}
public static void main(String[] args) throws Exception {
// TODO Auto-generated method stub
System.out.println("-----");
// 建立SAXReader解析器
SAXReader reader = new SAXReader();
Document document = reader.read("src//dom4j//student.xml");
// 获取根元素
Element root = document.getRootElement();
// 获取指定元素,返回集合
List <Element> list = root.elements("student");
// 遍历
for (Element element : list) {
String name = element.elementText("name");
String age = element.elementText("age");
String num = element.attributeValue("number");
System.out.println(name);
System.out.println(age);
System.out.println(num);
}
test();
}
}
复制代码
未完待续!!