一、 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();
}
}
複製代碼
未完待續!!