XML
一、XML
XML(Extensible Markup Language)可扩展的标记语言,XML语法和HTML相似,但标签是可以由用户自定义的。
作用:XML灵活实现不同路径执行不同资源
文档声明:version、encoding属性 元素:开始标签、元素体、结束标签,区分大小写 属性:属性名=属性值,属性值用单引或双引
CDATA区:
<?xml version="1.0" encoding="UTF-8"?> <myweb> <!-- 假设 xml里写 script CDATA 主要是用来放所有文本 但不能嵌套CDATA区 --> <abc width="1" >> < &</abc> <hello>你好</hello> <script> <![CDATA[ 此处是可以放转义词>?<><><>?<!@#$%^&* ]]> </script> </myweb>
二、DTD约束
DTD(Document Type Definition):文档类型定义,用来约束XML文档,文档中元素的名称、顺序、属性。、
<?xml version="1.0" encoding="UTF-8"?> <!-- <!-- 复制到web.xml里 --> <!DOCTYPE web-app SYSTEM "web-app_2_3.dtd"> --> <!-- < ! ELEMENT 声明元素 --> <!ELEMENT web-app (servlet*,servlet-mapping*,welcome-file-list?) > <!ELEMENT servlet (servlet-name,description?,(servlet-class|jsp-file))> <!ELEMENT servlet-mapping (servlet-name,url-pattern+) > <!ELEMENT servlet-name (#PCDATA)> <!ELEMENT servlet-class (#PCDATA)> <!ELEMENT url-pattern (#PCDATA)> <!ELEMENT description (#PCDATA)> <!ELEMENT jsp-file (#PCDATA)> <!ELEMENT welcome-file-list (welcome-file+)> <!ELEMENT welcome-file (#PCDATA)>
xml内容编写:
<?xml version="1.0" encoding="UTF-8"?> <!-- 这是从.dtd文件中复制过来的 --> <!DOCTYPE web-app SYSTEM "web-app_2_3.dtd"> <web-app> <servlet> <servlet-name></servlet-name> <servlet-class></servlet-class> </servlet> <servlet-mapping> <servlet-name></servlet-name> <url-pattern></url-pattern> <url-pattern></url-pattern> <url-pattern></url-pattern> <url-pattern></url-pattern> <url-pattern></url-pattern> </servlet-mapping> <welcome-file-list> <welcome-file></welcome-file> <welcome-file></welcome-file> <welcome-file></welcome-file> <welcome-file></welcome-file> <welcome-file></welcome-file> </welcome-file-list> </web-app>
元素声明:
?:零次或一次 *:零到多次 +:一到多次 ():给元素分组 |:选择其一 ,:指定顺序出现
三、Schema约束
Schema约束是新的XML文档约束,扩展名为xsd,数据类型更完善,支持命名空间。
<?xml version="1.0" encoding="UTF-8"?>
<!--
<web-app xmlns="http://www.example.org/web-app_2_5"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.example.org/web-app_2_5 web-app_2_5.xsd"
version="2.5">
-->
<!--
complexType 复杂类型
simpleType 简单类型
sequence 顺序 相当于,choice 选择 相当于 |
all 任意
minOccurs 最小个数
maxOccurs 最大个数 unbounded 没边 无限
-->
<xsd:schema xmlns="http://www.w3.org/2001/XMLSchema"
targetNamespace="http://www.example.org/web-app_2_5"
xmlns:xsd="http://www.w3.org/2001/XMLSchema"
xmlns:tns="http://www.example.org/web-app_2_5"
elementFormDefault="qualified">
<xsd:element name="web-app">
<xsd:complexType>
<xsd:choice minOccurs="0" maxOccurs="unbounded">
<xsd:element name="servlet">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="servlet-name"></xsd:element>
<xsd:element name="servlet-class"></xsd:element>
</xsd:sequence>
</xsd:complexType>
</xsd:element>
<xsd:element name="servlet-mapping">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="servlet-name"></xsd:element>
<xsd:element name="url-pattern" maxOccurs="unbounded"></xsd:element>
</xsd:sequence>
</xsd:complexType>
</xsd:element>
<xsd:element name="welcome-file-list">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="welcome-file" maxOccurs="unbounded"></xsd:element>
</xsd:sequence>
</xsd:complexType>
</xsd:element>
</xsd:choice>
<xsd:attribute name="version" type="double" use="optional"></xsd:attribute>
</xsd:complexType>
</xsd:element>
</xsd:schema>
xml内容编写:
<?xml version="1.0" encoding="UTF-8"?> <web-app xmlns="http://www.example.org/web-app_2_5" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.example.org/web-app_2_5 web-app_2_5.xsd" version="2.5"> <!-- 1.引入 2.根据schema编写xml --> <servlet> <servlet-name></servlet-name> <servlet-class></servlet-class> </servlet> <servlet-mapping> <servlet-name></servlet-name> <url-pattern></url-pattern> </servlet-mapping> <welcome-file-list> <welcome-file></welcome-file> </welcome-file-list> </web-app> 四、dom4j解析
1.DOM:把整个XML文档装载到内存,并解析成一个Document对象。保留了元素间的结构关系,当文档过大。
dom4j:使用核心类SaxReader加载xml文档获得Document,然后获得根元素。
import java.io.InputStream;
import java.util.List;
import org.dom4j.Document;
import org.dom4j.Element;
import org.dom4j.io.SAXReader;
public class demo4JTest {
public static void main(String[] args) throws Exception {
//加载流
InputStream is=demo4JTest.class.getClassLoader().getResourceAsStream("web.xml");
//核心类
SAXReader saxReader = new SAXReader();
//装载
Document document =saxReader.read(is);
//获得根元素
Element rootElement = document.getRootElement();
//获得属性
String wid=rootElement.attributeValue("wid");
System.out.println(wid);
//获得根元素下的其他元素
List<Element> allChildrenElement = rootElement.elements();
for (Element childElement : allChildrenElement) {
//打印元素名
String childEleName=childElement.getName();
System.out.println(childEleName);
//获得子元素对象,然后再获得文本
if("servlet".equals(childElement.getName())){
Element sonEle = childElement.element("servlet-name");
String sonText = sonEle.getText();
System.out.println(sonText);
}
//直接获得元素文本
if("servlet".equals(childElement.getName())){
String sonText=childElement.elementText("servlet-class");
System.out.println(sonText);
}
}
}
}
xPath:通过//路径直接获取
import java.io.InputStream;
import org.dom4j.Document;
import org.dom4j.Element;
import org.dom4j.Node;
import org.dom4j.io.SAXReader;
public class XpathTest {
public static void main(String[] args) throws Exception {
//加载流
InputStream is=XpathTest.class.getClassLoader().getResourceAsStream("web.xml");
//核心类
SAXReader saxReader= new SAXReader();
Document document=saxReader.read(is);
Node node=document.selectSingleNode("//servlet-class");
//强制转换
Element element=(Element)node;
System.out.println(element.getText());
}
}
2.SAX:逐行扫描文档,一遍扫描一遍解析,处理速度快,但只能读。
3.PULL:Android内置的XML解析方式。
小结:
感觉XML这部分的理论内容很容易,但是做起来感觉还是有一定难度的,需要一步步去探索,还是多练习吧。 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
