Java dom4j解析XML第一步:导入dom4j
http://www.jianshu.com/p/afc98f9bcfdb
Java dom4j解析XML第二步:读取XML文件
//创建SAXReader对象用于读取XML
SAXReader saxReader = new SAXReade();
//返回Document对象
Document document = saxReader.read(XML文件);
Java dom4j解析XML第三步:遍历Document对象
- 方式一:遍历器
Iterator<Node> iterator = document.nodeIterator();
while(iterator.hasNext()) {
Node node = iterator.next();
//得到节点的标签名
node.getName();
//得到节点的类型名
node.getNodeTypeName();
//获取node下的节点
Iterator<Node> nodeInterator = ((Element)node).nodeIterator();
while(nodeInterator.hasNext()) {
Node nextNode = nodeIterator.next();
//如果xml文件使用“Pretty”样式,节点间的空格和回车也属于Node,只是没有标签名,且属于text
if(nextNode instanceof Element) {
nextNode.getName();
nextNode.getNodeTypeName();
}
}
}
- 方式二:递归方式
//获取根节点
Element rootElement = document.getRootElement();
getElementsFrom(rootElement);
private static void getElementsFrom(Element element) {
//获取某个节点的所有直接子节点
List<Element> elements = element.elements();
//遍历
for(Element ele : elements) {
//判断节点的属性个数
if(ele.attributeCount() > 0) {
//遍历节点的属性
for(int i = 0; i < ele.attributeCount(); i ++) {
Attribute attribute = ele.attribute(i);
}
}
//节点的标签名
ele.getName();
//判断某个节点是否只包含文本内容
if(ele.isTextOnly()) {
//节点下的文本内容
ele.getText();
}
getElementsFrom(ele);
}
}
//获取节点指定标签名的子节点
element.element(标签名);
//获取节点指定标签名的子节点的text
element.elementText(标签名);
//获取节点指定属性名的属性
element.attribute(属性名);
//获取节点指定属性名的属性值
element.attributeValue(属性名);