使用DOM的方式解析XML文件
关于XML的注意点
XML文件的父节点的属性要有一个id
如若是父节点中的子节点还有子节点,也注意添加当前被当作父节点的子节点的id属性。
主要方法
DocumentBuilderFactory dbf =DocumentBuilderFactory.newInstance(); //创建实例
DocumentBuilder db = dbf.newDocumentBuilder();
Document document = db.parse("xml文件的路径");
NodeList nodeList = document.getElementsByTagName("xml的节点名称");
Node node = nodeList.item(i); //通过 item的形式获取当前第几个节点,i通过for循环 nodeList得出。
----------------------------------------------
NamedNodeMap attrs = node.getAttributes();//获取当前节点下的子节点
for(int j = 0;j<attrs.getLength();j++){ //这里面的属性只包括了nodeList节点的属性,不包括其所包含的子节点的属性
Node attr= attrs.item(j);
System.out.println("属性名:"+attr.getNodeName()+" 属性值:"+attr.getNodeValue());
}
---------------------------------
NodeList childNodes = node.getChildNodes(); //这里是获取当前节点的子节点
for(int k=0;k<childNodes.getLength();k++){
//判断子节点中的节点类型,如果不判断会有默认的 #text的节点出来,则判断是否等于 element的节点
if(childNodes.item(k).getNodeType() == Node.ELEMENT_NODE){
//获取了element类型节点的节点名
Node child = childNodes.item(k);
if(child.hasAttributes()){ //这里我判断改节点是否还有子节点
NodeList childNodeList = document.getElementsByTagName("paper");
NamedNodeMap nodeAttrs = childNodeList.item(0).getAttributes();//是 nodeList节点,
for(int j = 0;j<attrs.getLength();j++){
Node nodeAttr= attrs.item(j);
System.out.println("nodeAttr属性名:"+nodeAttr.getNodeName()+" nodeAttr属性值:"+nodeAttr.getNodeValue());
}
NodeList childNodelist = child.getChildNodes(); //这里是获取当前节点的子节点
for(int l=0;l<childNodelist.getLength();l++){
if(childNodelist.item(l).getNodeType() == Node.ELEMENT_NODE){
System.out.println("childNodelist子节点属性名:" + childNodelist.item(l).getNodeName());
System.out.println("childNodelist子节点属性值:" + childNodelist.item(l).getTextContent()); //获取子节点的值,是用getTextContent
}
}
}else{
System.out.print("子节点属性名:" + childNodes.item(k).getNodeName());
System.out.println("子节点属性值:" + childNodes.item(k).getTextContent());
}
}
}
}
以上的解析,个人想法跟js获取html元素的思路会差不多。
html代码:
<!DOCTYPE html>
<html>
<head></head>
<body>
<div id="first">
<p></p>
<p></p>
<p></p>
<p></p>
<ul>
<li></li>
</ul>
</div>
<div id="sec">
<p></p>
<p></p>
<p></p>
<p></p>
</div>
<div id="thr">
<p></p>
<p></p>
<p></p>
<p></p>
</div>
<div id="four">
<p></p>
<p></p>
<p></p>
<p></p>
</div>
</body>
</html>
var divList = document.getElementsByTagName("div");
for(int i=0;i<divList.length;i++){
var Obj = divList[i]; //这里获取了每个div的节点
if(Obj.hasChildNodes()){//判断节点有无子节点
var childList = Obj.getElementsByTagName("*");//*是获取全部类型节点
//接下来再一致进行对子节点的获取.....
for(int j=0;j<childList.length;j++){
if(childList[j].hasChildNodes()){//判断节点有无子节点
//进行获取操作
}else{
//进行获取操作
}
}
}
}