81,094
社区成员
发帖
与我相关
我的任务
分享
<?xml version="1.0" encoding="UTF-8"?>
<employees bb="bbbbb" yy="yyyyy">
<!--An XML Note -->
<?target text?>
<employee id="11" name="xiaowang">
<sex>man</sex>
<age>25</age>
</employee>
<employee id="12" name="liyi">
<sex>woman</sex>
<age>45</age>
</employee>
</employees>
import java.io.File;
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 DomXml {
public static void main(String[] args) {
File file = new File("F:/demo.xml");
(new DomXml()).readXML(file);
}
/*
* 读取XML(文档-根节点-元素节点-文本节点-属性) ; 获取文档对象:DocumentBuilderFactory →
* DocumentBuilder → Document
*/
public void readXML(File file) {
// 获得DocumentBuilderFactory
DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
try {
// 获得DocumentBuilder
DocumentBuilder builder = factory.newDocumentBuilder();
// --获得文档对象--
Document doc = builder.parse(file);
// 获的根元素
Element element = doc.getDocumentElement();
// 用方法遍历打印所有的节点和属性(用空格分层次显示)
listAllChildNodes(element, 0);
} catch (ParserConfigurationException e) {
e.printStackTrace();
} catch (SAXException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
/*
* 递归遍历并打印所有的node(包括文本节点的内容和节点属性),按一般的xml样式展示出来
*/
public void listAllChildNodes(Node node, int level) {
// 空格层次 - level
String levelSpace = "";
for (int i = 0; i < level; i++) {
levelSpace += " ";
}
// 先打印元素的开始标签 <Element>(有属性的话往里面添加属性)
System.out.print(levelSpace + "<" + node.getNodeName()
+ (node.hasAttributes() ? " " : ">"));
// 遍历打印节点的所有属性
if (node.hasAttributes()) {
NamedNodeMap nnmap = node.getAttributes();
for (int i = 0; i < nnmap.getLength(); i++) {
System.out.print(nnmap.item(i).getNodeName() + "=\""
+ nnmap.item(i).getNodeValue() + "\""
+ (i == (nnmap.getLength() - 1) ? "" : " "));
}
System.out.print(">"
+ (node.getNodeType() == Node.TEXT_NODE ? "" : "\n"));
}
// 递归遍历所有子节点
if (node.hasChildNodes()) {
level++;
NodeList nodelist = node.getChildNodes();
for (int i = 0; i < nodelist.getLength(); i++) {
listAllChildNodes(nodelist.item(i), level);
}
level--;
}
// 文本加点打印出来文本内容
if (node.getNodeType() == Node.TEXT_NODE) {
System.out.print(node.getTextContent());
}
// 打印元素的结束标签
System.out.println(levelSpace + "</" + node.getNodeName() + ">");
}
}