`
ghost_fly
  • 浏览: 108732 次
  • 性别: Icon_minigender_1
  • 来自: 长沙
社区版块
存档分类
最新评论

利用DOM读取XML文件

    博客分类:
  • JAVA
XML 
阅读更多

java中有专门读取xml文件的类和方法,下面是一个从xml文件中读取数据到标准输出的例子。

 

  import java.io.*; 
  import javax.xml.parsers.*;

  import org.xml.sax.*;

  import org.w3c.dom.*;

  public class DOMDemo

  {

  //设置输出编码格式

  static final String outputEncoding="UTF-8";

  private PrintWriter out;

  DOMDemo(PrintWriter out)

  {

  this.out=out;

  }

  private void print(Node node)

  {

  //打印节点名称

  out.println("NodeName=\""+node.getNodeName()+"\"");

  //打印节点URI

  String value=node.getNamespaceURI();

  if(value!=null)

  {

  out.println("URL=\""+value+"\"");

  }

  //打印节点前缀

  value=node.getPrefix();

  if(value!=null)

  {

  out.println("Prefix=\""+value+"\"");

  }

  //打印节点本地名称

  value=node.getLocalName();

  if(value!=null)

  {

  out.println("LocalName=\""+value+"\"");

  }

  //打印节点值

  value=node.getNodeValue();

  if(value!=null)

  {

  out.println("NodeValue=");

  if(value.trim().equals(""))

  {

  out.println("[WS]");

  }

  else

  {

  out.println("\""+node.getNodeValue()+"\"");

  }

  }

  }

  private void echo(Node node)

  {

  int type=node.getNodeType();

  switch(type)

  {

  //属性节点

  case Node.ATTRIBUTE_NODE:

  out.println("ATTR");

  print(node);

  break;

  //CDATA

  case Node.CDATA_SECTION_NODE:

  out.println("CDATA");

  print(node);

  break;

  //注释

  case Node.COMMENT_NODE:

  out.println("COMMENT");

  print(node);

  break;

  //段落节点

  case Node.DOCUMENT_FRAGMENT_NODE:

  out.println("DOC_FRAGMENT");

  print(node);

  break;

  //文档节点

  case Node.DOCUMENT_NODE:

  out.println("DOC");

  print(node);

  break;

  //文档类型节点

  case Node.DOCUMENT_TYPE_NODE:

  out.println("DOC_TYPE");

  print(node);

  break;

  //元素节点

  case Node.ELEMENT_NODE:

  out.println("ELEMENT");

  print(node);

  //得到该节点所有属性

  NamedNodeMap atts=node.getAttributes();

  for(int i=0;i 

  {

  Node att=atts.item(i);

  //递归调用

  echo(att);

  }

  break;

  //实体节点

  case Node.ENTITY_NODE:

  out.println("ENTITY");

  print(node);

  break;

  //实体引用节点

  case Node.ENTITY_REFERENCE_NODE:

  out.println("ENTITY_REF");

  print(node);

  break;

  //处理说明节点

  case Node.NOTATION_NODE:

  out.println("NOTATION");

  print(node);

  break;

  //预处理节点

  case Node.PROCESSING_INSTRUCTION_NODE:

  out.println("PROC_INST");

  print(node);

  break;

  //文本节点

  case Node.TEXT_NODE:

  out.println("TEXT");

  print(node);

  break;

  //未知节点

  default:

  out.println("UNKNOWN NODE:"+type);

  print(node);

  }

  //遍历该节点子节点

  for(Node child=node.getFirstChild();

  child!=null;child=child.getNextSibling())

  {

  echo(child);

  }

  }

  public static void main(String[] args)

  {

  //生成一个DocumentBuilderFactory

  DocumentBuilderFactory dbf=

  DocumentBuilderFactory.newInstance();

  //生成一个DocumentBuilder

  DocumentBuilder db=null;

  try

  {

  db=dbf.newDocumentBuilder();

  }

  catch(ParserConfigurationException pce)

  {

  System.out.println(pce.toString());

  }

  String fileName=args[0];

  //生成文档

  Document doc=null;

  try

  {

  //解析文档

  doc=db.parse(new File(fileName));

  }

  catch(IOException ioe)

  {

  System.out.println(ioe.toString());

  }

  catch(SAXException se)

  {

  System.out.println(se.toString());

  }

  try

  {

  //显示DOM树

  OutputStreamWriter outWriter=

  new OutputStreamWriter(System.out,outputEncoding);

  new DOMDemo(new PrintWriter(outWriter,true)).echo(doc);

  }

  catch(UnsupportedEncodingException uee)

  {

  System.out.println(uee.toString());

  }

  }

  }

 

综上,主要用的类有:DocumentBuilderFactory,DocumentBuilder,NamedNodeMap,用到的接口有Document,Node,并且用到了递归调用,输出流。

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics