import java.io.IOException;
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.parsers.ParserConfigurationException;
import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.w3c.dom.NamedNodeMap;
import org.w3c.dom.Node;
import org.w3c.dom.NodeList;
import org.xml.sax.SAXException;
public class DOM {
public static void main(String[] args) {
// 创建一个DocumentBuilderFactory对象
DocumentBuilderFactory xDocumentBuilderFactory = DocumentBuilderFactory.newInstance();
try {
// 创建一个DocumentBuilder对象
DocumentBuilder xdocumentBuilder = xDocumentBuilderFactory.newDocumentBuilder();
// 传入要解析的XML文件
Document xDocument = xdocumentBuilder.parse("applicationContext.xml");
// 通过标签获得节点集合
NodeList beanList = xDocument.getElementsByTagName("bean");
System.out.println("共有" + beanList.getLength() + "个节点");
// 遍历每一个bean节点
for (int i = 0; i < beanList.getLength(); i++) {
// 获取其中一个节点
Node bean = beanList.item(i);
// 获取所有属性值
NamedNodeMap attrs = bean.getAttributes();
System.out.println("第" + (i + 1) + "个bean有" + attrs.getLength() + "个属性");
// 遍历节点属性
for (int j = 0; j < attrs.getLength(); j++) {
// 获取某一属性
Node attr = attrs.item(j);
// 获取属性名
System.out.println("属性名:" + attr.getNodeName());
// 获取属性值
System.out.println("属性值:" + attr.getNodeValue());
}
// 当不需要遍历所有属性时,采用以下方法可遍历个别已知属性
Element bean2 = (Element) beanList.item(i);
System.out.println("采用Element方式获得id:" + bean2.getAttribute("id"));
// 解析bean节点的子节点
NodeList childBean = bean.getChildNodes();
// 遍历 childBean每个节点的节点名和节点值,空白和换行符也会算作子节点
System.out.println("第" + (i + 1) + "bean" + "共有" + childBean.getLength() + "个子节点");
for (int j = 0; j < childBean.getLength(); j++) {
// 区分text类型的Node以及element类型的Node,过滤掉空白与换行符
if (childBean.item(j).getNodeType() == Node.ELEMENT_NODE) {
// 获取element类型节点的节点名
System.out.println("第" + (j + 1) + "个节点的节点名:" + childBean.item(j).getNodeName());
// element会把标签中的内容视为标签的子节点,所以要想获取内容需先访问子节点
if(childBean.item(j).getFirstChild() != null){
System.out.println("第" + (j + 1) + "个节点的节点值:" + childBean.item(j).getFirstChild().getNodeValue());
}
// 获取子节点的节点值以及标签之间的值
System.out.println("第" + (j + 1) + "个节点的节点值:" + childBean.item(j).getTextContent());
}
}
}
} catch (ParserConfigurationException e) {
e.printStackTrace();
} catch (SAXException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
}
原文:https://blog.youkuaiyun.com/ggsimida2016/article/details/60592879