JR 精品文章 - 利用DOM读取XML文件
AD: jr (at) javaresearch.org


首页 | 动态 | 文章 | FAQ  | 新闻 | 下载 | 代码 | 工作 | 调查 | 术语 | 站点 | 图书 | 论坛 | 帮助 | 全部  

TOP | 交流 | 软件 | 专栏 | 开源 | 译/著 | 源码 | API  | 推荐 | FTP  | 积分 | 统计 | 搜索 | Blog | 我们  
首页 » 研究文集 » Web Services&XML 搜索标题相关文章 搜索标题相关文章    评论此文章 发表评论     开始监控此文章 开始监控   加入收藏夹  加入收藏夹
利用DOM读取XML文件
tiandi2997 原创   更新:2007-11-22 10:02:11  版本: 1.0   

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


版权声明   给作者写信
本篇文章对您是否有帮助?  投票:         投票结果:     8       0
作者其它文章: 作者全部文章

这个文章共有 0 条评论
主题: 浅谈Java中的通信机制及与C/C++ API的集成 上一篇文章
返回文章列表 返回〔Web Services&XML〕
下一篇文章 主题: xml文件的解析(利用javax.xml.*)


文字广告链接
        自主、快速定制基于JAVA的B/S业务系统          重量级企业在线自定义WEB报表平台
        Excel制表、零代码发布、打印、图表结合——快逸报表,免费、稳定、功能强大的java工具
        技术圈: 关于Java、dotNet、PHP、Ruby、奇客、Web2.0等更多资讯博客精选文章

关于 JR  |  版权声明  |  联系我们 

©2002-2006 JR 版权所有 沪ICP备05019622号