DOM解析
dom解析
解析步骤 :
需要工厂类 DocumentBuilderFactory调用初始化
直接newDocumentBuilder 返回一个 DocumentBuilder对象
通过parse方法可以解析xml
可以传入相对路劲和绝对路径
Parse返回的是Document 对象 注意 导包需要导入的是W3C的
接着对xml进行操作
getElementByTagName方法 返回NodeList
调用item()获取属性
getAttribute获取所有属性 返回的是NameNodeMap 集合
最后就可以便利数据
getNodeName 和getNodeValue 属性名称和值
Element 元素 下有一个方法 getAttribute(“id”)
public static void main(String[] args) throws ParserConfigurationException, SAXException, IOException {
DocumentBuilderFactory document= DocumentBuilderFactory.newInstance();
DocumentBuilder builder = null;
builder = document.newDocumentBuilder();
Document doc= builder.parse("x1.xml");
// 获取所有book节点集合
NodeList nodelist= doc.getElementsByTagName("book");
System.out.println("总共有:"+nodelist.getLength()+"本书");
for (int i = 0; i < nodelist.getLength(); i++) {
System.out.println("开始便利所有节点---------------");
NamedNodeMap nodemap= nodelist.item(i).getAttributes();
System.out.println("总共有:"+nodemap.getLength()+"属性");
/* for (int j = 0; j < nodemap.getLength(); j++) {
Node node= nodemap.item(j);
System.out.println("属性名称:"+node.getNodeName()+", 属性值:"+node.getNodeValue());
}*/
/*Element element=(Element) nodemap.item(i);
int str=element.getChildNodes().getLength();
System.out.println("子节点的长度:"+str);*/
Element element= (Element) nodelist.item(i);
NodeList chiledNode= element.getChildNodes();
int a= element.getChildNodes().getLength();
for (int j = 0; j < a; j++) {
if (chiledNode.item(j).getNodeType() == Node.ELEMENT_NODE) {
System.out.print("第" + (j + 1) + "个节点的节点名:" + chiledNode.item(j).getNodeName());
// 获取标签,值
System.out.println(chiledNode.item(j).getTextContent());
// 获取值
System.out.println(chiledNode.item(j).getFirstChild().getNodeValue());
}
}
System.out.println(a+"结束所有节点---------------");
System.out.println();
}
}