天天看点

利用java处理XML文档

在java对XML进行处理时,读取XML文档,对其处理,这是我得一个实例代码。

import java.io.FileInputStream;

import javax.xml.parsers.*;

import org.w3c.dom.*;

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);

   }

  }

 }

}

 =============================================

DocumentBuildFactory factory =DocumentBuildFactory.newInstance();

DocumentBuilder builder=factory.newDocumentBuilder();

Document doc=builder.parse(new File("config.xml"));

Element root=document.getDocumentElement();//根节点

Node n1=DOMUTils.getChild(root,"title");

String s=(n1==null)?null:DOMUtils.getTextValue(n1);

DOMUtils为辅助类

下面为其两个关键方法:注意是核心代码,不是完整代码

public static Node getChild(Node parent,String name){

NodeList children=parent.getChildNodes();

int len = children.getLength();

Node node = null;

for(int i=0;i<len;i++)

{

node=children.item(i);

String thisname=node.getNodeName();

if(name.equals(thisname))

{return node;

}

}

}

public static String getTextValue(Node node){

if((node.getNodeType()==Node.TEXT_NODE )||(node.getNodeType()==Node.CDATA_SECTION_NODE))

{return node.getNodeValue();

}

}