到 Google 资讯主页   
EasyJF首页   资料   源码   软件    论坛   网站    
   使用帮助    
    该信息为本站MyRSS系统缓存内容,部分图片及附件有可能无法正常使用.easyjf.comwww.javaresearch.org无关,不对该信息负责.通过http://www.javaresearch.org/article/79375.htm访问该信息的原始内容.
页面功能  【加入收藏】 【推荐给朋友】 【字体:  】 【关闭】   
利用DOM读取XML文件
作者: 来源:www.javaresearch.org  发布时间:2007-12-11 10:59:08.38


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<atts.getLength();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,并且用到了递归调用,输出流,本人认为该例子是初学者参考学习的好例子


 
相关文章
 
页面功能  【加入收藏】 【推荐给朋友】 【字体:  】 【关闭】   


EasyJF.com 2006 隐私政策 使用EasyJF前必读