xml资料保存1

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

  }

  }

  }

  编译、运行如下:

  E:/gongcheng>javac DOMDemo.java

  E:/gongcheng>java DOMDemo aaa.xml

  运行结果省略。其中的aaa.xml是相应的xml文件。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值