——Java培训、Android培训、iOS培训、.Net培训、期待与您交流! ——
-这里写代码片 ## Java中解析xml文件 ##
第一讲 用SAXReader解析 SAX 解析 xml文件也是最常用的
准备xml文件
java解析
package com.kaka.util;
import java.io.File;
import java.util.Iterator;
import org.dom4j.Document;
import org.dom4j.DocumentException;
import org.dom4j.Element;
import org.dom4j.io.SAXReader;
import org.xml.sax.XMLReader;
/**
* @author Administrator
*
*java中解析xml文件——dom4j
*
*工具 dom4j 驱动包
*
*/
public class Dom4jParseXML {
//main函数
public static void main(String[] args) {
parseXML(“Product.xml”);
}
//用dom4j解析xml文件的方法
private static void parseXML(String name) {
// TODO Auto-generated method stub
//先创建一个file文件对象,解析的目标文件
File ff=new File(name);
//创建xml解析器,SAX解析器
SAXReader sr=new SAXReader();
try {
//用解析器开始解析file文件,获取xml文档
Document read = sr.read(ff);
//获取文档的根节点 root
Element rootElement = read.getRootElement();
//把所有的元素放入迭代器中,获取元素的迭代器
Iterator elementIterator = rootElement.elementIterator();
//遍历这个迭代器,,循环出根节点里第一层子节点
while(elementIterator.hasNext()){
//获取根节点的第一个子节点
Element next =(Element) elementIterator.next();
//获取这个子节点的属性的值
System.out.println(next.attributeValue("id"));
//重复上面的动作,第一个子节点的下子节点的迭代器
Iterator elementIterator2 = next.elementIterator();
while(elementIterator2.hasNext()){
//获取来的子节点
Element next2 =(Element) elementIterator2.next();
//打印出元素节点和文本节点
System.out.println("username = "+next2.getName()+"password = "+next2.getText());
}
}
} catch (DocumentException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
Dom标准解析xml
xml文件同上
第二讲dom解析xml文件 dom解析比较 没有SAX解析的方便 不过原理都是一样的
package com.kaka.util;
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.Node;
import org.w3c.dom.NodeList;
import org.xml.sax.SAXException;
/**
* @author Administrator
*
* 最原始的解析xml文件
*
* dom解析xml
*
*/
public class DomParseXML {
public static void main(String[] args) {
domParseXML("Product.xml");
}
private static void domParseXML(String name) {
// TODO Auto-generated method stub
//创建文档解析器工厂
DocumentBuilderFactory dbf=DocumentBuilderFactory.newInstance();
try {
//创建xml文档解析器
DocumentBuilder newDocumentBuilder = dbf.newDocumentBuilder();
try {
//根据文件名开始解析xml文件,到一部分开始同SAX解析一样了,获取文档对象
//同SAX File ff=new File("Product.xml"); SAXReader sr=new SAXReader();
//等同与这一句 :Document ee=sr.read(ff);
Document parse = newDocumentBuilder.parse(name);
//获取根节点,如果<root>节点存在多个话,所以用item(0),拿到root节点中第一个子节点,
//同Element rootElement = read.getRootElement(); Iterator elementIterator = rootElement.elementIterator();
NodeList childNodes = parse.getElementsByTagName("root").item(0).getChildNodes();
//上面得到一个特殊的list集合,拿到集合的长度
int len = childNodes.getLength();
System.out.println("包括空白节点总共有多少个节点 长度 = "+len);
//childNodas集合 遍历集合 ,拿出节点
for(int i=0;i<len;i++){
//遍历的节点 <root> 的子节点中包括 空白节点和document节点
Node item1 = childNodes.item(i);
//的子节点中包括 空白节点和document节点,只要是元素节点才拿出来
//获取节点类型 getNodeType() 如果是元素节点 == Node.DOCUMENT_NODE
if(item1.getNodeType()==Node.ELEMENT_NODE){
System.out.println("拿到的user节点的名字:"+item1.getNodeName());
System.out.println("拿到的 user id属性值:"+item1.getAttributes().getNamedItem("id").getNodeValue());
//拿到user节点所有节点
NodeList childNodes2 = item1.getChildNodes();
//拿到user下面的所有节点 其中也包括空节点 和 文档节点
int length2 = childNodes2.getLength();
System.out.println("user节点所有节点:"+length2);
//遍历出所有节点
for(int j=0;j<length2;j++){
//拿到节点
Node item2 = childNodes2.item(j);
if(item2.getNodeType()==Node.ELEMENT_NODE){
System.out.println("元素节点名字:"+item2.getNodeName());
System.out.println("元素节点的值:"+item2.getFirstChild().getNodeValue());
}
}
System.out.println("=======================================================================");
}
}
} catch (SAXException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
} catch (ParserConfigurationException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}