XML详解
1、XML
1.1 XML特点
1.2 XML的应用
1.2.1 配置文件
1.2.2 传输数据
1.3 XML和HTML的区别
1.4 XML基本语法
1.5 XML组成部分
1.5.1 文档声明
1.5.2 标签
1.5.3 指令
1.5.4 属性
1.5.5 文本
2、约束
2.1 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"?>
<!DOCTYPE students SYSTEM "student.dtd">
<students>
<student number="A1001">
<name>AA</name>
<age>18</age>
<sex>man</sex>
</student>
<student number="B1001">
<name>BB</name>
<age>28</age>
<sex>woman</sex>
</student>
</students>
2.1.1 DTD验证
2.2 Schema 约束
2.2.1 Schema验证
- book.xsd
<?xml version="1.0" encoding="UTF-8" ?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:element name="books">
<xs:complexType>
<xs:sequence>
<xs:element name="book" maxOccurs="unbounded">
<xs:complexType>
<xs:sequence>
<xs:element name="name" type="xs:string"></xs:element>
<xs:element name="author" type="xs:string"></xs:element>
<xs:element name="price" type="xs:double"></xs:element>
</xs:sequence>
<xs:attribute name="id" type="xs:positiveInteger" use="required"></xs:attribute>
</xs:complexType>
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:schema>
- book.xml
<?xml version="1.0" encoding="UTF-8" ?>
<books xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:noNamespaceSchemaLocation="book.xsd" >
<book id="1001">
<name>java开发实战</name>
<author>张小三</author>
<price>98.5</price>
</book>
</books>
- Demo.java
import org.xml.sax.SAXException;
import javax.xml.transform.Source;
import javax.xml.transform.stream.StreamSource;
import javax.xml.validation.Schema;
import javax.xml.validation.SchemaFactory;
import javax.xml.validation.Validator;
import java.io.File;
import java.io.IOException;
public class Demo {
public static void main(String[] args) throws SAXException{
// 创建SchemaFactory工厂
SchemaFactory sch = SchemaFactory.newInstance("http://www.w3.org/2001/XMLSchema");
// 建立验证文件对象
File schemaFile = new File("src/com/jsoup/xml/book.xsd");
// 利用SchemaFactory工厂对象,接收验证的文件对象,生成Schema对象
Schema schema = sch.newSchema(schemaFile);
// 产生对此schema的验证器
Validator validator = schema.newValidator();
// 验证的数据(准备的数据源)
Source source = new StreamSource("src/com/jsoup/xml/book.xml");
// 开始验证
try {
validator.validate(source);
System.out.println("验证成功");
} catch (IOException e) {
e.printStackTrace();
System.out.println("验证失败");
}
}
}
3、XML解析
3.1 XML解析思想
3.2 常见解析器
3.3 Jsoup解析器
3.3.1 Jsoup解析
import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
import org.jsoup.nodes.Element;
import org.jsoup.select.Elements;
import java.io.File;
import java.io.IOException;
import java.net.URL;
public class Demo {
public static void main(String[] args) throws IOException {
// 解析本地xml文件
String path = Demo.class.getClassLoader().getResource("com/jsoup/xml/index.html").getPath();
// System.out.println(path);
Document document = Jsoup.parse(new File(path),"utf-8");
// System.out.println(document);
// 解析字符串
// Document doc = Jsoup.parse("<!DOCTYPE html>\n" +
// "<html lang=\"en\">\n" +
// "<head>\n" +
// " <meta charset=\"UTF-8\">\n" +
// " <title>Title</title>\n" +
// "</head>\n" +
// "<body>\n" +
// " <p>Hello world!</p>\n" +
// "</body>\n" +
// "</html>");
// System.out.println(doc);
// 解析网络资源
// Document doc1 = Jsoup.parse(new URL("https://www.baidu.com/s?wd=xml+schema"),5000);
// System.out.println(doc1);
// 根据id获取元素
// Element e1 = document.getElementById("hh");
// 根据标签获取元素
Elements e1 = document.getElementsByTag("p");
// for (Element element : e1) {
// System.out.println(element);
// System.out.println(element.text());
// }
// 根据属性获取元素
Elements e2 = document.getElementsByAttribute("name");
// for (Element element : e2) {
// System.out.println(element);
// }
// 根据属性名=属性值获取元素
Elements ee = document.getElementsByAttributeValue("name","ttt");
// for (Element element : ee) {
// System.out.println(element);
// }
// 使用css选择器获取元素
Elements select = document.select("#hh");
System.out.println(select.text()); // 获取文本值
System.out.println(select.html()); // 获取文本值,如果有标签,也会显示出来
System.out.println(select.attr("id")); // 获取id属性的属性值
}
}
3.3.2 XPath解析
import cn.wanghaomiao.xpath.model.JXDocument;
import cn.wanghaomiao.xpath.model.JXNode;
import