文章目录
变量 数组 对象 对象数组 集合 文件/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文档由两部分组成:
-
声明 放在XML文档的第一行 用来标注本文档的一个配置格式
version 采用的版本规范 encoding编码
-
主体的描述内容
主体的描述内容由标签(元素/节点/标记)组成。
一定有且仅有一个根标签。
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中有些地方不允许出现< "等符号,我们可以使用转义符来解决此问题。
<(less than) <
>(greater than) >
'(apostrophe) '
"(quotes) "
& &
<![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);