加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

XML

发布时间:2020-12-16 00:04:00 所属栏目:百科 来源:网络整理
导读:一、XML XML(Extensible Markup Language)可扩展的标记语言,XML语法和HTML相似,但标签是可以由用户自定义的。 作用: XML灵活实现不同路径执行不同资源 文档声明:version、encoding属性 元素:开始标签、元素体、结束标签,区分大小写 属性:属性名=属

一、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这部分的理论内容很容易,但是做起来感觉还是有一定难度的,需要一步步去探索,还是多练习吧。

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读