java里如何正确使用XML文件

什么是xml

xml是可扩展标记语言,简单理解,就是可预定义标签的编程语言。虽然和html类似,但主要是用于数据存储和传输数据;HTML用于显示数据。

XMl的结构:

<root>         <!-- 根结点-->
  <child> 			<!-- 子结点-->
    <subchild>		<!-- 根节点的孙子结点,子节点的子节点-->
        .....
    </subchild>
  </child>
  <child>   <!-- 上一个child的兄弟结点-->
    <subchild>
        .....
    </subchild>
  </child>  
</root>

XML的结构一定含有根节点/根元素,这个节点为所有节点的父节点

语法详解

  • XML以<?xml version="1.0" encoding="ISO-8859-1"?>开头,这句话用于定义XML的版本和所采用的字符集。
  • 标签以成对的方式出现,如:
  • XML的大小写敏感
  • 因为<>被用于当做语法标签的符号,所以文本的内容的< 号就失效了,所以我们使用 ;&lt 来表示小于号,使用;&gt表示大于号 ;&quto表示双引号
  • 使用 < !-- 注释内容 – >

示例:

<?xml version="1.0" encoding="UTF-8"?>
 <!DOCTYPE books [
	<!ELEMENT books (book*)>
	<!ELEMENT book (name,author,price)>
	<!ELEMENT name (#PCDATA)>
	<!ELEMENT author (#PCDATA)>
	<!ELEMENT price (#PCDATA)>
	<!ATTLIST book id CDATA #REQUIRED>
]>
<books>
	<book id="1001">
		<name>java开发实战</name>
		<author>张小三</author>
		<price>98.5</price>
	
	</book>
	<book id="1002">
		<name>mysql从删库到跑路</name>
		<author>王一一</author>
		<price>89.7</price>
		
	</book>
</books>

找到这个xml文件,显示这样的形式就是没有问题的
在这里插入图片描述
案例解析
我们使用DTD验证去避免XML文件给出报错提示,去验证XML的有效性

 <!DOCTYPE books [
	<!ELEMENT books (book*)>
	<!ELEMENT book (name,author,price)>
	<!ELEMENT name (#PCDATA)>
	<!ELEMENT author (#PCDATA)>
	<!ELEMENT price (#PCDATA)>
	<!ATTLIST book id CDATA #REQUIRED>
]> 

PCDATA(Parsed Character DATA)的意思是:被解析的字符数据
CDATA(Unparsed Character Data)意思是:不应由 XML 解析器进行解析的文本数据

DTD的局限性

  • 不遵守XML语法
  • DTD数据类型有限
  • DTD不可以扩展
  • DTD不支持命名空间

DTD的代替技术 – Schema

Schema全称为XML Schema,用于描述XML文档结构,比DTD更加强大,最关键的特征就是,Schema支持数据类型
Schema特点

  • 是用于支持XML验证
  • 可以使用处理XML文档的工具进行操作
  • 扩充了数据类型,可以自定义数据类型
  • 支持元素的继承
  • 支持属性组

格式

<?xml version="1.0" encoding="UTF-8"?>
	<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
	
	</xs:schema>

注意要点

  • 所有的Schema文档使用schema作为根元素
  • http://www.w3.org/2001/XMLSchema:用于验证当前 Schema 文档的命名空间(用于验证 Schema 本身)
    同时它还规定了来 自命名空间http://www.w3.org/2001/XMLSchema的元素和数 据类型应该使用前缀 xs:
  • xmlns 相当于 java 中的 import, :xs“小名”,在使用时要写加 “小名”做前缀

使用Schema去验证XML文档的流程:

  1. 创建Schemafactory工厂
  2. 建立验证文件对象
  3. 利用SchemaFactory工厂对象,接收验证的文件对象,生成Schema对象
  4. 产生对此schema的验证器
  5. 要验证的数据
  6. 开始验证

示例代码

创建一个xsd文件,存放Schema

<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
	<xs:element name="books">
		<xs:complexType>
			<xs:sequence>
				<xs:element name="book" maxOccurs="unbounded">
					<xs:complexType>
						<xs:sequence>
							<xs:element name="name" type="xs:string"></xs:element>
							<xs:element name="author" type="xs:string"></xs:element>
							<xs:element name="price" type="xs:double"></xs:element>
						</xs:sequence>
						<xs:attribute name="id" type="xs:positiveInteger" use="required"></xs:attribute>
					</xs:complexType>
				</xs:element>
			</xs:sequence>
		</xs:complexType>
	</xs:element>
</xs:schema>

在XML文件内引用xsd文件

<?xml version="1.0" encoding="UTF-8"?>

<books xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
 xsi:noNamespaceSchemaLocation="{book.xsd}">
	<book id="1001">
		<name>java开发实战</name>
		<author>张三</author>
		<price>98.5</price>
	</book>
	<book id="1002">
		<name>mysql开发</name>
		<author>李四</author>
		<price>89.7</price>
	</book>
</books>

对验证器进行验证

package com.bjsxt.schema;

import java.io.File;
import java.io.IOException;

import javax.xml.transform.Source;
import javax
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值