XML语言介绍、XML约束、和解析XML语言的几种方式。

前端之家收集整理的这篇文章主要介绍了XML语言介绍、XML约束、和解析XML语言的几种方式。前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

一、XML定义

1.1、XML介绍

Extensible Markup Language 可扩展的标记语言.XML技术是W3C组织发布的,目前推荐遵循的是W3C组织于2000年发布的XML1.0规范。在现实生活中大量存在有关系的数据。可以通过XML技术来描述这些关系数据。在XML语言中,它允许用户自定义标签。一个标签用于描述一段数据:一个标签可分为开始标签和结束标签。在开始标签和结束标签之间又可以使用其它标签描述其它数据。

<中国>
	<北京>
		<海淀></海淀>
		<丰台></丰台>
	</北京>
	<杭州>
		<西湖></西湖>
		<滨江></滨江>
	</杭州>
</中国>

1.2、XML使用场景

  • 保存有关系的数据
  • 软件配置文件(描述程序之间的关系)

二、XML语法

2.1、XML语法组成

  • 文档声明
<!--standalone:是否是独立的文档。-->
<!--在xml中,空格和换行都作为原始内容被处理。-->
<!--不要出现中文全角空格。-->
<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
  • 元素
<!--包含标签体-->
<a>内容</a>

<!--不包含标签体-->
<a/>

<!--嵌套标签,不允许交叉嵌套。-->
<a>
	<b>内容2</b>
</a>

<!--XML文档只能有一个根标签。-->
<soft>
	<c></c>
	<d></d>
</soft>

<!--对于XML标签中出现的所有空格和换行,XML解析程序都会当作标签内容进行处理。-->
<网址>
	www.163.com
</网址>
<!--XML属性的定义。-->
<demo name="text"></demo>

<!--也可以使用标签嵌套的方式来使用属性。-->
<demo>
	<name>text</name>
</demo>
  • 注释
<!-- 注释 -->
<!--XML声明之前不能有注释-->
<!--注释不能嵌套-->
  • CDATA区、特殊字符
  • 处理指令(processing instruction)

二、XML约束

1、要用一定的规范来约束XML语言,按照自定义规范来编写XML文档。

2、XML约束技术:XML DTD 和 XML Schema技术。

三、XML约束:(DTD约束)

1、DTD(Document Type Definition文档类型定义) book.dtd

<!--元素定义:ELEMENT
	书架(书+):括号里放入元素名称
	书架ANY:括号里放入元素类型ANY标识任何类型
	书(书名,作者,售价):用逗号分割,表示内容的出现顺序必须与声明时一致
	书(书名|作者|售价):用|分割,表示任选其一,即多个只能出现一个
	书+:一次或多次
	书?:0次或一次
	书*:0次或多次
	书:必须出现一次
-->
<!ELEMENT书架(书+)><!--中间空格不可缺-->
<!ELEMENT书(书名,售价)>
<!ELEMENT书名(#PCDATA)><!--#PCDATA:字符串-->
<!ELEMENT作者(#PCDATA)>
<!ELEMENT售价(#PCDATA)>

<!--为元素设置属性-->
<!--为标签配置属性定义
	通过ATTLIST元素设置属性
	属性属性值类型(CDTAT:字符串,ENUMERATED:枚举,ID,ENTITY:实体)
	设置说明(#required:必须的。#IMPLIED:可以设置也可以不设置。#FIXED:固定值)
	
	<!ATTLIST元素名
	姓名字符串可选的
	年龄CDATA可选的
	联系信息CDATA必须的
	网站职务CDATA固定值提供的固定值
	个人爱好CDATA直接使用默认值
>
-->

<!ATTLIST作者
	姓名CDATA#IMPLIED
	年龄CDATA#IMPLIED
	联系信息CDATA#required
	网站职务CDATA#FIXED"CTO"
	个人爱好CDATA"ABC"
>

2、book.xml就可以按照dtd文件元素定义的约束规范来写了。

<?xmlversion="1.0"encoding="UTF-8"?>
<!DOCTYPE书架SYSTEM"book.dtd">

<书架>
	<书>
		<书名>Spring攻略第二版</书名>
		<作者联系信息="110">GaryMakJoshLong</作者>
		<售价>100元</售价>
	</书>
	<书>
		<书名>JavaWeb开发</书名>
		<作者联系信息="110">方立勋</作者>
		<售价>80元</售价>
	</书>
	
</书架>

四、XML解析和DOM、SAX解析原理(XML解析开发包:Jaxp(官方API),Jdom,dom4j(性能最好))

  1. DOM解析方式

/**

* DOM解析方式(文档对象模型 W3C标准) :

* DOM解析会把整个文档放入直接放入内存里(以对象树的方式)

* 1.把每个节点变成Element对象

* 2.把每个属性变成Attribute对象

* 3.把每个文本变成Text对象

* 优点:对文档的增删改查比较容易。

* 缺点:如果文档比较大,内存就会溢出。

* 在DOM解析下,xml文档的每一个组成部分都会用对象来表示,如:标签名用Element,属性名用Attribute

* 但是不管什么对象,都是Node(节点对象)的子类,在开发中获取的任意节点都可以当做Node来使用。

*/

/**
	*DOM解析:使用jaxp方式(性能最差)
	*获取某个节点下的文本值
	*@throwsException
	*/
	@Test
	publicvoidtestJaxp1()throwsException{
		//1.创建工厂
		DocumentBuilderFactorydocumentBuilderFactory=DocumentBuilderFactory.newInstance();
		//2.获取DOM对象树的解析器
		DocumentBuilderdocumentBuilder=documentBuilderFactory.newDocumentBuilder();
		//3.解析XML文档,获取代表文档的Document对象
		Documentdocument=documentBuilder.parse("src/book.xml");
		//4.获取指定标签名的元素,返回一个集合
		NodeListnodeList=document.getElementsByTagName("书名");
		//5.获取nodeList下指定的元素
		Nodenode=nodeList.item(1);
		//6.获取元素下的文本值
		Stringcontent=node.getTextContent();
		//7.打印
		System.out.println(content);
		
	}
	
	/**
	*DOM解析:使用jaxp方式(性能最差)遍历所有的节点(递归)
	*@throwsException
	*/
	@Test
	publicvoidtestJaxp2()throwsException{
		//1.创建工厂
		DocumentBuilderFactorydocumentBuilderFactory=DocumentBuilderFactory.newInstance();
		//2.获取DOM对象树的解析器
		DocumentBuilderdocumentBuilder=documentBuilderFactory.newDocumentBuilder();
		//3.解析XML文档,获取代表文档的Document对象
		Documentdocument=documentBuilder.parse("src/book.xml");
		//4.获取根节点(根节点只有一个)
		NodeListnodeList=document.getElementsByTagName("书架");
		Nodenode=nodeList.item(0);
		
		list(node);
		
	}
	
	privatevoidlist(Nodenode){
		
		if(nodeinstanceofElement){
			System.out.println(node.getNodeName());
		}
		
		//1.得到当前根节点下的所有子节点
		NodeListnodeList=node.getChildNodes();
		//2.遍历所有的子节点
		for(inti=0;i<nodeList.getLength();i++){
			//3.如果当前子节点还有子节点,获取子节点的子节点
			Nodechild=nodeList.item(i);
			//4.递归
			list(child);
		}
	}

	
	//得到标签下的某个属性值
	@Test
	publicvoidtestJaxp3()throwsException{
		//1.创建工厂
		DocumentBuilderFactorydocumentBuilderFactory=DocumentBuilderFactory.newInstance();
		//2.获取DOM对象树的解析器
		DocumentBuilderdocumentBuilder=documentBuilderFactory.newDocumentBuilder();
		//3.解析XML文档,获取代表文档的Document对象
		Documentdocument=documentBuilder.parse("src/book.xml");
		//4.获取指定标签名的元素,返回一个集合(在这里我们知道作者这个标签是Element元素才进行强转)
		Elementelement=(Element)document.getElementsByTagName("作者").item(0);
		//5.获取属性值
		Stringcontent=element.getAttribute("联系信息");
		//6.打印
		System.out.println(content);
		
	}
	//添加节点
	@Test
	publicvoidtestJaxp4()throwsException{
		//1.创建工厂
		DocumentBuilderFactorydocumentBuilderFactory=DocumentBuilderFactory.newInstance();
		//2.获取DOM对象树的解析器
		DocumentBuilderdocumentBuilder=documentBuilderFactory.newDocumentBuilder();
		//3.解析XML文档,获取代表文档的Document对象
		Documentdocument=documentBuilder.parse("src/book.xml");
		//4.创建标签
		ElementpriceElement=document.createElement("售价");
		//5.为标签体设置内容
		priceElement.setTextContent("59");
		//6.得到新创建的标签想要添加的位置
		Nodebook=document.getElementsByTagName("书").item(0);
		//7.添加新创建的标签
		book.appendChild(priceElement);
		//8.把更新后的内存中的document对象树重新写回xml文档里
		Transformertransformer=TransformerFactory.newInstance().newTransformer();
		SourcexmlSource=newDOMSource(document);
		transformer.transform(xmlSource,newStreamResult(newFileOutputStream("src/book.xml")));

	}
原文链接:https://www.f2er.com/xml/295387.html

猜你在找的XML相关文章