日期:2014-04-11 浏览次数:21068 次
在java对XML进行处理时,读取XML文档,对其处理,这是我得一个实例代码。
import java.io.FileInputStream; 
import javax.xml.parsers.*; 
import org.w3c.dom.*; 
/* 
* Created on 2004-6-2 
*java读取XML文档 
*利用DoM来读取一个XML文档的内容,并将其打印出来 
*/ 
public class TestXML {
public static void main(String[] args) { 
  Document doc; 
  DocumentBuilderFactory factory; 
  DocumentBuilder docBuilder; 
   
   Element root; 
   String elementName; 
   
  FileInputStream in; 
  String fileName; 
  try{ 
    
   //get the xml file 
   fileName = System.getProperty("user.dir"); 
   fileName = fileName+"/sample.xml"; 
   in = new FileInputStream(fileName); 
    
   //解析XML文件,生成document对象 
   factory = DocumentBuilderFactory.newInstance(); 
   factory.setValidating(false); 
   docBuilder = factory.newDocumentBuilder(); 
   doc = docBuilder.parse(in); 
   //解析成功 
   System.out.println("parse successfull"); 
    
   //获取XML文档的根节点 
   root = doc.getDocumentElement();    
   elementName = root.getNodeName(); 
   //打印根节点的属性 
   printAttributes(root); 
    
   //打印该文档全部节点 
   System.out.println("打印全部节点"); 
   printElement(root,0); 
    
  } 
  catch(Exception exp){ 
   exp.printStackTrace(); 
  } 
} 
  
//打印某个节点的全部属性 
public static void printAttributes(Element elem){ 
  NamedNodeMap attributes; 
  int i,max; 
  String name,value; 
  Node curNode; 
   
  attributes = elem.getAttributes(); 
  max = attributes.getLength(); 
   
  for(i=0;i<max;i++){ 
   curNode = attributes.item(i); 
   name = curNode.getNodeName(); 
   value = curNode.getNodeValue(); 
   System.out.println("\t"+name+" = "+value); 
  } 
} 
//打印所有的节点的名称和值 
//改方法采用递归方式打印文档的全部节点 
public static void printElement(Element elem,int depth){ 
  String elementName; 
  NodeList children; 
  int i,max; 
  Node curChild; 
  Element curElement; 
  String nodeName,nodeValue; 
   
  //elementName = elem.getNodeName(); 
  //获取输入节点的全部子节点 
  children = elem.getChildNodes(); 
   
  //按一定格式打印输入节点 
  for(int j=0;j<depth;j++){ 
   System.out.print(" "); 
  } 
  printAttributes(elem); 
   
  //采用递归方式打印全部子节点 
  max = children.getLength(); 
  for(i=0;i<max;i++){ 
    
   curChild = children.item(i); 
    
   //递归退出条件 
   if(curChild instanceof Element){ 
    curElement = (Element)curChild; 
    printElement(curElement,depth+1); 
   } 
   else{ 
    nodeName = curChild.getNodeName(); 
    nodeValue = curChild.getNodeValue(); 
     
    for(int j=0;j<depth;j++)System.out.print(" "); 
    System.out.println(nodeName+" = "+nodeValue); 
   } 
  } 
} 
}