xml文件:
<?xml version="1.0" encoding="UTF-8"?>
<bookstore>
<book category="COOKING">
<title lang="en">Everyday Italian</title>
<author>Giada De Laurentiis</author>
<year>2005</year>
<price>30.00</price>
</book>
<book category="CHILDREN">
<title lang="en">Harry Potter</title>
<author>J K. Rowling</author>
<year>2005</year>
<price>29.99</price>
</book>
<book category="WEB">
<title lang="en">Learning XML</title>
<author>Erik T. Ray</author>
<year>2003</year>
<price>39.95</price>
</book>
</bookstore>
- xml文件开头要加上版本信息和编码方式<?xml version="1.0" encoding="UTF-8"?>
- 根节点是<bookstore>,文档中的所有其他节点都被包含在<bookstore>中。
- 根节点<bookstore>有3个<book>节点,每个<book>节点有4个子节点:<title>,<author>,<year>,<price>。
- 每个子节点都包含文本节点:“Everyday Italian”,“Giada De Laurentiis”,“2005”,“30.00”。<year>2005</year>说明元素节点<year>拥有一个值为"2005"的文本节点。
读取xml文件数据:
package com.Test.Data;
import org.w3c.dom.*;
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
/**
* 读取xml文件数据
*/
public class xmlReader {
public static void main(String[] args) {
try {
/**
* 准备工作
*/
// 创建一个DocumentBuilderFactory(DOM解析器工厂)的对象
DocumentBuilderFactory dbFactory = DocumentBuilderFactory.newInstance();
// 创建一个DocumentBuilder(DOM解析器)的对象
DocumentBuilder db = dbFactory.newDocumentBuilder();
// 把要解析的xml文件读入DOM解析器
Document document = db.parse("src/com/Test/Data/ReadData.xml");
// 获取所有book节点的集合
NodeList bookList = document.getElementsByTagName("book");
// 获取bookList的长度,遍历每一个book节点
for (int i = 0; i < bookList.getLength(); i++) {
System.out.println("遍历第" + (i + 1) + "个book节点:");
/**
* 使用DOM解析xml文件的属性名和属性值
*/
// 未知节点属性的个数和属性名时
// 获取一个book节点,bookList的索引值从0开始
Node book = bookList.item(i);
// 获取book节点的所有属性的集合
NamedNodeMap attrs = book.getAttributes();
// 获取attrs的长度,遍历每一个book节点的属性
for (int j = 0; j < attrs.getLength(); j++) {
// 获取book节点的某一个属性
Node attr = attrs.item(j);
// 获取属性名和属性值
System.out.println("属性名:" + attr.getNodeName() + "--属性值:" + attr.getNodeValue());
}
// 已知节点属性的个数和属性名时
// 将book节点进行强制类型转换,转换成Element类型
// Element book = (Element)bookList.item(i);
// 获取category的属性值
// String attrValue = book.getAttribute("category");
// System.out.println("category的属性值为:" + attrValue);
/**
* 使用DOM解析xml文件的节点名和节点值
*/
// 解析book节点的子节点
NodeList childNodes = book.getChildNodes();
// 获取childNodes的长度,遍历每一个子节点
for (int k = 0; k < childNodes.getLength(); k++) {
// 可以区分Element类型的Node(ELEMENT_NODE)和Text类型的Node(TEXT_NODE)
if (childNodes.item(k).getNodeType() == Node.ELEMENT_NODE) {
// 获取Element类型节点的节点名和节点值
System.out.println("节点名:" + childNodes.item(k).getNodeName() + "--节点值是:" + childNodes.item(k).getTextContent());
// 不能通过getNodeValue()直接获取节点值,标签之间的文本被看作是标签的子节点
// System.out.println("--节点值:" + childNodes.item(k).getFirstChild().getNodeValue());
}
}
}
} catch (Exception e) {
e.printStackTrace();
}
}
}
写入xml文件数据:
package com.Test.Data;
import org.w3c.dom.Document;
import org.w3c.dom.Element;
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.parsers.ParserConfigurationException;
import javax.xml.transform.OutputKeys;
import javax.xml.transform.Transformer;
import javax.xml.transform.TransformerFactory;
import javax.xml.transform.dom.DOMSource;
import javax.xml.transform.stream.StreamResult;
import java.io.File;
/**
* 写入xml文件数据
*/
public class xmlWriter {
public static void main(String[] args) throws ParserConfigurationException {
try {
/**
* 准备工作
*/
DocumentBuilderFactory dbFactory = DocumentBuilderFactory.newInstance();
DocumentBuilder db = dbFactory.newDocumentBuilder();
// 创建一个Document(空白文档)的对象
Document document = db.newDocument();
/**
* 添加节点和属性
*/
// 创建根节点
Element bookstore = document.createElement("bookstore");
// 设置book节点
Element book = document.createElement("book");
// 将book节点添加到根节点中
bookstore.appendChild(book);
// 添加book节点的属性名和属性值
book.setAttribute("id", "001");
// 添加book节点的子节点的节点名和节点值
Element name = document.createElement("name");
name.setTextContent("小王子");
book.appendChild(name);
// 将根节点添加到dom树中
document.appendChild(bookstore);
/**
* 生成xml文件
*/
// 创建一个TransformerFactory的对象
TransformerFactory tff = TransformerFactory.newInstance();
// 创建一个Transformer的对象
Transformer tf = tff.newTransformer();
// 输出内容是否使用换行
tf.setOutputProperty(OutputKeys.INDENT, "yes");
// 创建xml文件并写入内容
tf.transform(new DOMSource(document), new StreamResult(new File("book.xml")));
} catch (Exception e) {
e.printStackTrace();
System.out.println("生成xml文件失败");
}
}
}