XML详解原理

XML用法:

<?xml version="1.0" encoding="UTF-8"?>
<!-- 
	这是XML的注释  (xml是可扩展的标记性语言)
	
	XML初始用法:
	由于实际工作中  可能会出现互相传递一组数据的情况
	直接传递数据文件   数据文件可读性较差  并且需要IO流解析
	所以创建XML版本的数据文件
	
	XML现在用法:
	现在认为xml既可用于互相传递数据  也可以用作配置文件
	所以xml 现在基本上作为配置文件和数据文件两种格式存在
	
	俗称: 报文
	
-->
<person>
	<person id="1001">
		<name>&lt;张三&gt;</name>
		<age>18</age>
		<score>60</score>
	</person>
	
	<person id="1002">
		<name>张四</name>
		<age>18</age>
		<score>60</score>
	</person>

	<person id="1003">
		<name>张五</name>
		<age>18</age>
		<score>60</score>
	</person>

	<person id="1004">
		<name>张六</name>
		<age>18</age>
		<score>60</score>
		
		<car id="1" name="bmw" />
		<money>
			<![CDATA[
				<> 这里是纯文本  想写什么就写什么  不会被转译&lt;
			]]>
		</money>
	</person>

</person>

XML中DTD规则

<?xml version="1.0" encoding="UTF-8"?>
<!-- xml中的dtd规则 -->
<!DOCTYPE students [
	<!ELEMENT student (id,name,age,score)>
	<!ELEMENT id (#PCDATA)>
	<!ELEMENT name (#PCDATA)>
	<!ELEMENT age (#PCDATA)>
	<!ELEMENT score (#PCDATA)>
]>
<students>
	
	<student>
		<id></id>
		<name></name>
		<age></age>
		<score></score>
	</student>
	
</students>

XML的DTD详情

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE TVSCHEDULE [

<!--电视节目表DTD   David Moisan创造-->

<!ELEMENT TVSCHEDULE (CHANNEL+)>
<!ELEMENT CHANNEL (BANNER,DAY+)>
<!ELEMENT BANNER (#PCDATA)>
<!ELEMENT DAY (DATE,(HOLIDAY|PROGRAMSLOT+)+)>
<!ELEMENT HOLIDAY (#PCDATA)>
<!ELEMENT DATE (#PCDATA)>
<!ELEMENT PROGRAMSLOT (TIME,TITLE,DESCRIPTION?)>
<!ELEMENT TIME (#PCDATA)>
<!ELEMENT TITLE (#PCDATA)> 
<!ELEMENT DESCRIPTION (#PCDATA)>

<!ATTLIST TVSCHEDULE NAME CDATA #REQUIRED>
<!ATTLIST CHANNEL CHAN CDATA #REQUIRED>
<!ATTLIST PROGRAMSLOT VTR CDATA #IMPLIED>
<!ATTLIST TITLE RATING CDATA #IMPLIED>
<!ATTLIST TITLE LANGUAGE CDATA #IMPLIED>

XML的DTD.xml

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE TVSCHEDULE SYSTEM "TVSCHEDULE.dtd">


<!--电视节目表DTD   David Moisan创造-->

<!ELEMENT TVSCHEDULE (CHANNEL+)>
<!ELEMENT CHANNEL (BANNER,DAY+)>
<!ELEMENT BANNER (#PCDATA)>
<!ELEMENT DAY (DATE,(HOLIDAY|PROGRAMSLOT+)+)>
<!ELEMENT HOLIDAY (#PCDATA)>
<!ELEMENT DATE (#PCDATA)>
<!ELEMENT PROGRAMSLOT (TIME,TITLE,DESCRIPTION?)>
<!ELEMENT TIME (#PCDATA)>
<!ELEMENT TITLE (#PCDATA)> 
<!ELEMENT DESCRIPTION (#PCDATA)>

<!ATTLIST TVSCHEDULE NAME CDATA #REQUIRED>
<!ATTLIST CHANNEL CHAN CDATA #REQUIRED>
<!ATTLIST PROGRAMSLOT VTR CDATA #IMPLIED>
<!ATTLIST TITLE RATING CDATA #IMPLIED>
<!ATTLIST TITLE LANGUAGE CDATA #IMPLIED>

<TVSCHEDULES>
<TVSCHEDULE NAME="1">
	<CHANNEL CHAN="1">
		<BANNER></BANNER>
		<DAY>
			<DATE></DATE>
			<HOLIDAY></HOLIDAY>
		</DAY>
	</CHANNEL>
</TVSCHEDULE>

<TVSCHEDULE NAME="1">
	<CHANNEL CHAN="1">
		<BANNER></BANNER>
		<DAY>
			<DATE></DATE>
			<PROGRAMSLOT VTR="">
				<TIME RATING=""></TIME>
				<TITLE LANGUAGE=""></TITLE>
				<DESCRIPTION></DESCRIPTION>
			</PROGRAMSLOT>
			<HOLIDAY></HOLIDAY>
		</DAY>
	</CHANNEL>
</TVSCHEDULE>
</TVSCHEDULES>

XML的Test解析代码(dom4j)

package com.ddh.test;

import java.util.List;

import org.dom4j.Document;
import org.dom4j.DocumentException;
import org.dom4j.Element;
import org.dom4j.io.SAXReader;
import org.junit.Test;

public class XMLTest {

	@Test
	public void testDOM4j() throws DocumentException {

		/*
		 * 早起JDK为我们提供了两种xml解析技术Dom和Sax简介(已经过时)
		 * 
		 * 第三方解析技术: dom4j解析技术
		 * 
		 * 导入dom4j jar包到lib文件夹,鼠标右键build path-->add to
		 */
		
		//1 创建SAXReader对象  reader
		SAXReader reader=new SAXReader();
		//2 reader对象关联指定的xml文件  创建Document
		Document document=reader.read("src\\person.xml");
		//3 获取根节点
		Element root=document.getRootElement();
		//4 通过根节点获取子节点
		
		@SuppressWarnings("unchecked") //取消警告
		List<Element> personList = root.elements("person");
		//5遍历子节点并输出
		for (Element person : personList) {
			//获取子节点的属性
			String id = person.attributeValue("id");
			
			
			//获取子节点的内容
			Element nameElement = person.element("name");
			Element ageElement = person.element("age");
			Element scoreElement = person.element("score");
			
			System.out.println(id+" "+nameElement.getText()+" "+ageElement.getText()+" "+scoreElement.getText());
		}
	}
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Java开发-斗灵

客官打个赏呗

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值