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这部分的理论内容很容易,但是做起来感觉还是有一定难度的,需要一步步去探索,还是多练习吧。 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |