[Source Code]学习了一种比较经典的遍历XML文件的方法

使用DOM:

package com.mycompany.xmltest;

import java.io.File;
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.Element;
import org.w3c.dom.NamedNodeMap;
import org.w3c.dom.Node;
import org.w3c.dom.NodeList;
import org.xml.sax.SAXException;

public class DOMParseXML {
 
 public void scanXML(File thefile) {
  DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
  DocumentBuilder db = null;
  Document doc = null;
  try {
   db = dbf.newDocumentBuilder();
  } catch (ParserConfigurationException e) {
   // TODO Auto-generated catch block
   e.printStackTrace();
  }
  try {
   doc = db.parse(thefile);
  } catch (SAXException e) {
   // TODO Auto-generated catch block
   e.printStackTrace();
  } catch (IOException e) {
   // TODO Auto-generated catch block
   e.printStackTrace();
  }
  Element root = doc.getDocumentElement();
  echoNode(root);
 }

 private void echoNode(Node node) {
  
  switch (node.getNodeType()) {
  case Node.ELEMENT_NODE:
   System.out.println("This is an element: ");
   System.out.println("Name: " + node.getNodeName() + "/n");
   if (node.hasChildNodes()) {
    NodeList nlist = node.getChildNodes();
    for (int i = 0; i < nlist.getLength(); i++) {
     echoNode(nlist.item(i));
    }
   }
   
   if (node.hasAttributes()) {
    NamedNodeMap namedNodeMap = node.getAttributes();
    for (int i = 0; i < namedNodeMap.getLength(); i++) {
     echoNode(namedNodeMap.item(i));
    }
   }
   break;
   
  case Node.ATTRIBUTE_NODE:
   System.out.println("This is an attribute: ");
   System.out.println("Name :" + node.getNodeName());
   System.out.println("Value :" + node.getNodeValue() + "/n");
   break;
   
  case Node.TEXT_NODE:
   System.out.println("This is a text: ");
   System.out.println("Content: /" " + node.getNodeValue() + "/"/n");
   break;
   
  default:
   System.out.println("### Node type: " + node.getNodeType() + "###");
   System.out.println("Name: " + node.getNodeName());
   System.out.println("Value: " + node.getNodeValue());
   break;
  }
 }
 
 public static void main(String[] args) {
  DOMParseXML test = new DOMParseXML();
  test.scanXML(new File("F://1.xml"));
 }

}

 

使用Dom4j:

package com.mycompany.xmltest;

import java.io.File;
import java.util.Iterator;

import org.dom4j.Attribute;
import org.dom4j.Document;
import org.dom4j.DocumentException;
import org.dom4j.Element;
import org.dom4j.Node;
import org.dom4j.io.SAXReader;

public class Dom4jParseXML {

 public void scanXML(File thefile){
  SAXReader saxReader = new SAXReader();
  Document doc = null;
  try {
   doc = saxReader.read(thefile);
  } catch (DocumentException e) {
   e.printStackTrace();
  }
  Element root = doc.getRootElement();
  echo(root);
 }

 private void echo(Node node) {
  
  switch (node.getNodeType()) {
  case Node.ELEMENT_NODE:
   System.out.println("############## This is an element: ###############");
   System.out.println("Type Name: " + node.getNodeTypeName());
   System.out.println("Node Name: " + node.getName());
   System.out.println("Xpath StringValue: " + node.getStringValue());
   System.out.println("*********************************************");
   Element ele = (Element) node;
   if (ele.attributeCount() !=0 ) {
    Iterator attrIt = ele.attributeIterator();
    while (attrIt.hasNext()) {
     echo((Node) attrIt.next());
    }
   }

   if (ele.hasContent()) {
    Iterator eleIt = ele.elementIterator();
    while (eleIt.hasNext()) {
     echo((Node) eleIt.next());
    }
   }
   break;
   
  case Node.ATTRIBUTE_NODE:
   System.out.println("~~~~~~~~~~~~~~ This is an attribute: ~~~~~~~~~~~~~~~");
   System.out.println("Type Name: " + node.getNodeTypeName());
   System.out.println("Node Name: " + node.getName() + "      Value: " + ((Attribute)node).getValue());
   System.out.println("Xpath StringValue: " + node.getStringValue());
   System.out.println("*********************************************");
   break;
   
  case Node.TEXT_NODE:
   System.out.println("========== This is a text: " + node.getText() + "=========");
   System.out.println("*********************************************");
   break;
   
  default:
   System.out.println(" ^^^^^^^^^^^^^ Other type of node: ^^^^^^^^^^^^^");
   System.out.println("Type Name: " + node.getNodeTypeName());
   System.out.println("Node Name: " + node.getName());
   System.out.println("*********************************************");
   break;
  }
 }
 
 public static void main(String[] args) {
  Dom4jParseXML test = new Dom4jParseXML();
  test.scanXML(new File("F://build.xml"));
 }
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值