public static void printAttribture(Node node){
NamedNodeMap nodeList = node.getAttributes();
for(int i=0;i<nodeList.getLength();i++){
Node attr = nodeList.item(i);
System.out.println(attr.getNodeName()+" = "+attr.getNodeValue());
}
}
/**
* 解析完整XML
* employeeMeta.item(k) instanceof Element //一定要加上他,否则会有很多 #text,因为解析时 将换行,缩进等符号也当成了节点,另一种方法是将XML中的空格等去掉
* Node instanceof Text的场合:输出是:#text
* Node instanceof Element的场合:输出是:标签名
* @param fileName
*/
public void parserXml(String fileName) {
try {
DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
DocumentBuilder db = dbf.newDocumentBuilder();
Document document = db.parse(fileName);
NodeList employees = document.getChildNodes();
for (int i = 0; i < employees.getLength(); i++) {
Node employee = employees.item(i);
NodeList employeeInfo = employee.getChildNodes();
for (int j = 0; j < employeeInfo.getLength(); j++) {
Node node = employeeInfo.item(j);
if(node instanceof Text) continue;
printAttribture(node);
NodeList employeeMeta = node.getChildNodes();
for (int k = 0; k < employeeMeta.getLength(); k++) {
if(employeeMeta.item(k) instanceof Element){
System.out.println(employeeMeta.item(k).getNodeName()
+ ":" + employeeMeta.item(k).getTextContent());
}
}
}
}
System.out.println("解析成功!");
} catch (Exception e) {
System.out.println(e.getMessage());
}
}
<?xml version="1.0" encoding="UTF-8"?>
<students>
<student id="001" xx="haha">
<name>张三</name>
<age>24</age>
<sex>男</sex>
</student>
<student id="002" xx="hehe">
<name>李四</name>
<age>21</age>
<sex>女</sex>
</student>
</students>