15、XML

变量 数组 对象 对象数组 集合 文件/IO流 XML …

1. 理解XML概念和优势

XML(eXtensible Markup Language)可扩展的标记语言,文件格式:.xml

目前采用1.0版本,W3C(万维网联盟 world wide web…) 世界性的中立的技术标准组织 给一系列的内容制定标准,包含着XML。

它的作用:

1. 存储数据
2. 数据传输格式
3. 应用程序的配置文件
4. AJAX的基石

2. 会编写格式良好的XML文档

XML的组成

XML文档由两部分组成:

  1. 声明 放在XML文档的第一行 用来标注本文档的一个配置格式

    version 采用的版本规范 encoding编码

  2. 主体的描述内容

    主体的描述内容由标签(元素/节点/标记)组成。

    一定有且仅有一个根标签。

XML的标签

标签的语法:

<标签名  属性名="属性值"...>  标签内容  </标签名>

标签的分类:

<books></books>   双标签:由开放标签和闭合标签组成的  中间可以添加内容 标签内可以添加属性信息
<books/> 单标签/自闭和标签   只能添加一些属性信息
<?xml version="1.0" encoding="UTF-8"?>
<books>
	<book id="bk001">
		<name>深入JVM虚拟机</name>
		<author>周志明</author>
		<desc>深入去探究JVM虚拟机,目前已发行第二版。</desc>
	</book>
	<book id="bk002">
		<name>人性的弱点</name>
		<author>戴尔·卡耐基</author>
		<desc>深入去探究人性弱点,天才在左疯子在右</desc>
	</book>	
</books>

3. 了解XML中特殊字符的处理方式

有些时候我们确实需要在文件内存储一些符号,但是在XML中有些地方不允许出现< "等符号,我们可以使用转义符来解决此问题。

&lt;(less than)     <
&gt;(greater than)  >
&apos;(apostrophe)  '
&quot;(quotes)      "
&amp;               &
<![CDATA[ 无需考虑特殊符号的任意内容 ]]>

4. 了解解析器和DOM树节点构造

DOM解析:它是会将XML内容加载到内存中生成对应的文档结构树(DOM树)。

DOM(Document Object Model)

在文档结构树中,它是由一系列的节点构成的,节点有不同的类型,

例如:标签转换为了元素节点。

   注释转换为了注释节点

   标签内容转换为了文本节点

   标签属性转换为了属性节点

5. 会使用DOM操作XML数据

查询数据

	public static void getXMLContent() {
		// 获取所有的<user>元素节点
		NodeList userNodeList = document.getElementsByTagName("user");
		// 遍历出每一个<user>元素节点
		for (int i = 0; i < userNodeList.getLength(); i++) {
			// 每一个user元素节点
			Node userNode = userNodeList.item(i);
			// 获取它的id属性
			Element userEle = (Element)userNode;
			String userId = userEle.getAttribute("id");
			System.out.println("id"+userId);
			// 获取它的所有子元素节点
			NodeList userChildNodes = userEle.getChildNodes();
			for (int j = 0; j < userChildNodes.getLength(); j++) {
				Node userChildNde = userChildNodes.item(j);
				if (userChildNde instanceof Element) {
					Element userChildEle = (Element)userChildNde;
					String userName = userChildEle.getTagName();
					String userContent = userChildEle.getTextContent();
					System.out.println(userName+":"+userContent);
				}
			}
		}
	}

添加数据

	public static void addXMLContent() {
		// 在内存中创建<user>元素节点
		Element userEle = document.createElement("user");
		// 给<user>元素节点添加id属性
		userEle.setAttribute("id", "4");
		//  分别创建<userName> <passWord> <email>元素节点  并且指定好内容
		Element userName = document.createElement("userName");
		userName.setTextContent("cxk");
		Element userPassWord = document.createElement("passWord");
		userPassWord.setTextContent("cxknmsl");
		Element userEmail = document.createElement("email");
		userEmail.setTextContent("cxk@kgc.cn");
		// 将三个元素节点添加到<user>元素节点下
		userEle.appendChild(userName);
		userEle.appendChild(userPassWord);
		userEle.appendChild(userEmail);
		// 将<user>元素节点添加到<users>节点下
		Node userNode = document.getElementsByTagName("users").item(0);
		userNode.appendChild(userEle);
	}

保存数据

(写法固定)

	public static void transformDomcument(String xmlFile) throws Exception {
		// 创建转换工厂对象
		TransformerFactory transformerFactory = TransformerFactory.newInstance();
		// 转换工厂创建转换器
		Transformer transformer = transformerFactory.newTransformer();
		// 指定数据源和输出目的地
		DOMSource xmlSource = new DOMSource(document);
		StreamResult outputTarget = new StreamResult(new File(xmlFile));
		// 指定输出格式
		transformer.setOutputProperty("encoding", "UTF-8");
		transformer.transform(xmlSource, outputTarget);
	}

6.使用DOM操作XML(修改和删除)

根据标签名获取元素节点列表:NodeList getElementsByTagName(String tagName);

获取节点列表的长度:int getLength();

根据索引获取节点列表中的元素:Node item(int index);

获取元素节点的属性:String getAttribute(String name);

设置元素节点的属性:void setAttribute(String name,String value);

获取和设置元素节点内容:

	​String getTextContent();
	​void setTextContent(String textContent);

获取元素节点的元素名:String getTagName();

获取节点的所有子节点列表:NodeList getChildNodes();

获取节点的父节点:Node getParentNode();

删除某个子节点:void removeChild(Node childNode);

7. 使用DOM4J操作XML

获取根元素:Element getRootElement();

获取指定名称的所有的子元素节点:List<Element> elements(String tagName);

获取所有的子元素节点:List<Element> elements();

获取指定的子元素节点(单个):Element element(String tagName);

获取指定子元素的内容:String elementText(String tagName);

获取指定子元素的内容(去除空格):String elementTextTrim(String tagName);

给元素节点添加属性:void addAttribute(String name,String value);

给元素节点添加内容:void addText(String text); 如果有内容则使用void setText(String text);

根据名称创建并添加子元素节点:Element addElement(String tagName);

删除子元素节点:void remove(Element element);

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值