学习笔记(四)XML

xml(可扩张标志语言)

xml应用分类
  • 应用于客户需要与不同数据源进行交互
  • 应用于将大量运算负荷分布在客户端
  • 应用于将同一数据以不同的面貌展现给不同的用户
  • 应用与内容与配置管理

xml只用元素和属性来描述数据,而怒提供数据的显示方法

xml的基本结构

xml即一个以.xml为后缀的文件,包括:

  • xml声明
  • xml元素描述
<?xml version="1.0" encoding="utf-8" ?>
<books>
	<book>
		<name>Java</name>
		<author>zhang san</author>
	</book>
	<book>
		<name>C#</name>
		<author>li si</author>
	</book>
</books>
  • xml声明
版本声明:<?xml version="1.0"?>
编码声明:<?xml version="1.0" encoding="utf-8" ?>
独立声明:<?xml version="1.0" encoding="utf-8" standalone="yes"?>

版本声明: version : 解析这个xml的时候,使用什么版本的解析器解析
编码声明:encoding : 解析xml中的文字的时候,使用什么编码来翻译(utf-8,gbk,gb2312)
独立声明:standalone : no - 该文档会依赖关联其他文档 , yes-- 这是一个独立的文档

  • xml元素
    xml元素命名规则
    名称可以含字母、数字以及其他的字符
    名称不能以数字或者标点符号开始
    名称不能以字符 “xml”(或者 XML、Xml)开始
    名称不能包含空格
    可使用任何名称,无保留的字词
    * 好名称应具有描述性,能见名知意
  • CDATA
    由于xml解释器通常会解释xml文档中的所有文本。非法字符【“<”、"&"】而省略号、引号和大于号是合法,但把他们替换为实体引用是个好习惯
&lt< 小于
&gt> 大于
&amp& 和号
&apos’ 省略号
&quot" 引号

如不希望文本被解释器解释,则可以将文本放在CDATA标志中
CDATA:以“<![CDATA[” 开始,以 “]]>”结束

<ah> <![CDATA[<a href="http://www.baidu.com">百度一下</a>]]> </ah>

*CDATA的“]]>”结束部分不包含空格或拆行

  • xml注释
<!-- 这里是注释内容 -->

xml的注释,不允许放置在文档的第一行。 必须在文档声明的下面。

DTD与XML Schema

  • DTD[Document Type Definition]用来定义xml文档结构,包括:

元素的定义规则
元素间关系的定义规则
元素可使用的属性
可使用的实体或符号规则

DTD在xml文档内声明

 <!DOCTYPE 根元素 [元素声明]>

带有 DTD 的 XML 文档实例

<?xml version="1.0"?>
<!DOCTYPE books [
  <!ELEMENT books (book)>
  <!ELEMENT book (name,author)>
  <!ELEMENT name    (#PCDATA)>
  <!ELEMENT author (#PCDATA)>
]>
<books>
	<book>
		<name>Java</name>
		<author>zhang san</author>
	</book>
</books>
<!ELEMENT books (book)>:books下有只有一个元素book。 <!ELEMENT book (name,author)>:book下有两个元素name,author且顺序必为name - author

元素的个数:
+:一个或多个
*:零个或多个
?:零个或一个
属性的类型定义
CDATA : 属性是普通文字
ID : 属性的值必须唯一

<!ELEMENT stu (name , age)> 按照顺序来
<!ELEMENT stu (name | age)> 两个中只能包含一个子元素

PCDATA即被解析的字符数据(parsed character data)。

PCDATA 是会被解析器解析的文本。这些文本将被解析器检查实体以及标记。

CDATA 即字符数据(character data)。

CDATA 是不会被解析器解析的文本。在这些文本中的标签不会被当作标记来对待,其中的实体也不会被展开。

  • XML Schema

XML Schema:
– 定义可出现在文档中的元素
– 定义可出现在文档中的属性
– 定义哪个元素是子元素
– 定义子元素的次序
– 定义子元素的数目
– 定义元素是否为空,或者是否可包含文本
– 定义元素和属性的数据类型
– 定义元素和属性的默认值以及固定值

<?xml version="1.0"?>
<!-- xmlns :xml namespace:命名空间
	targetNamespace:目标命名空间
	elementFormDefault:元素格式化情况
-->
<schema xmlns="http://www.w3.org/2001/XMLSchema"
	targetNamespace="http://www.example.org/book"
	elementFormDefault="qualified">
<element name="book">
    <complexType>
      <sequence>
		<element name="name" type="xs:string"/>
		<element name="author" type="xs:string"/>
      </sequence>
    </complexType>
</element>
</schema>

<?xml version="1.0"?>
<!-- xmlns :xml namespace:命名空间
	targetNamespace:目标命名空间
	elementFormDefault:元素格式化情况
-->
<schema xmlns="http://www.w3.org/2001/XMLSchema"
	targetNamespace="http://www.example.org/book"
	elementFormDefault="qualified">
	
<element name="books">
    <complexType>
          <sequence>
			<element name="book">
   				 <complexType>
      				<sequence>
						<element name="name" type="xs:string"/>
						<element name="author" type="xs:string"/>
     				 </sequence>
   				 </complexType>
			</element>
   		</sequence>
   	</complexType>
</element>
</schema>

Java解释xml

  • DOM(文档对象模型)

    需要对文件进行修改
    需要对文件进行随机修改

  • SAX <事件驱动的>

对大型文件进行处理
只需修改文件夹部分内容,或只需从文件中得到特定信息
想建立自己的对象模型
###Dom4j 基本用法

	element.element("book") : 返回该元素下的第一个book元素
	element.elements(); 返回该元素下的所有子元素。 
  1. 创建SaxReader对象

  2. 指定解析的xml

  3. 获取根元素。

  4. 根据根元素获取子元素或者下面的子孙元素

     try {
     	//1. 创建sax读取对象
     	SAXReader reader = new SAXReader(); //jdbc -- classloader
     	//2. 指定解析的xml源
     	Document  document  = reader.read(new File("src/xml/books.xml"));
     	
     	//3. 得到元素、
     	//得到根元素
     	Element rootElement= document.getRootElement();
     	
     	//获取根元素下面的子元素 author
     //rootElement.element("author") 
     	//System.out.println(rootElement.element("book").element("author").getText());
    
    
     	//获取根元素下面的所有子元素 。 book元素
     	List<Element> elements = rootElement.elements();
     	//遍历所有的book元素
     	for (Element element : elements) {
     		//获取stu元素下面的name元素
     		String name = element.element("name").getText();
     		String age = element.element("author").getText();
     		System.out.println("name="+name+"==author+"+author);
     	}
     	
     } catch (Exception e) {
     	e.printStackTrace();
     }
    

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值