<?xml version="1.0" encoding="UTF-8"?>
<W>
<SS Q="0">
<Y Q="en">0</Y>
<Y>0</Y>
<Y>0</Y>
<Y>0</Y>
</SS>
<SS Q="0">
<Y Q="en">0</Y>
<Y>0</Y>
<Y>0</Y>
<Y>0</Y>
</SS>
<SS Q="0">
<Y Q="en">0</Y>
<Y>0</Y>
<Y>0</Y>
<Y>0</Y>
</SS>
</W>
package xml;
import org.w3c.dom.*;
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
/**
* 读取xml文件数据
*/
public class Read1 {
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("D://012.xml");
// 获取所有book节点的集合
NodeList bookList = document.getElementsByTagName("SS");
// 获取bookList的长度,遍历每一个book节点
for (int i = 0; i < bookList.getLength(); i++) {
System.out.println("遍历第" + (i + 1) + "个SS节点:");
/**
* 使用DOM解析xml文件的属性名和属性值
*/
// 未知节点属性的个数和属性名时
// 获取一个book节点,bookList的索引值从0开始
Node SS = bookList.item(i);
// 获取book节点的所有属性的集合
NamedNodeMap attrs = SS.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 = SS.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();
}
}
}
遍历第1个SS节点:
属性名:Q–属性值:0
节点名:Y–节点值是:0
节点名:Y–节点值是:0
节点名:Y–节点值是:0
节点名:Y–节点值是:0
遍历第2个SS节点:
属性名:Q–属性值:0
节点名:Y–节点值是:0
节点名:Y–节点值是:0
节点名:Y–节点值是:0
节点名:Y–节点值是:0
遍历第3个SS节点:
属性名:Q–属性值:0
节点名:Y–节点值是:0
节点名:Y–节点值是:0
节点名:Y–节点值是:0
节点名:Y–节点值是:0