赛迪网 > IT技术 Java > 技术动态
  IT资讯搜索
 
IT产品搜索
[程序开发][网管世界][网络安全][数据库技术]
[操作系统][嘉宾聊天·在线访谈][活动集锦]
[精彩专题][Symantec专区][订阅IT技术周刊]
[开发论坛][网管论坛][安全论坛][数据库论坛]
[操作系统论坛][Sybase专区][IBM dW技术专区]
[病毒求助][病毒与漏洞播报][文档·源码下载]

Web Services&XML:利用DOM读取XML文件

发布时间:2007.12.20 04:53     来源:赛迪网    作者:tiandi2997

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,并且用到了递归调用,输出流,本人认为该例子是初学者参考学习的好例子
   (责任编辑:包春林)


[ 发表评论 ] 字体[  ] [ 打印 ] [ 进入博客 ] [ 进入论坛 ]  [ 推荐给朋友 ]
  相关文章
· JAVA语言深入:java中获取系统属性的方法 (12-19) · JAVA基础:HTML中javascript 实现的排序 (12-19)
· JAVA入门:不建议初学者使用Java Enum (12-19) · 浅谈关于软件制造还是服务的一点点感想 (12-19)
· 浅谈Java中通信机制及与C/C++ API的集成 (12-19) · J2SE综合:Interface与Object之间关系问题 (12-19)
· Java中String类型的参数传递问题的解析 (12-19) · J2EE综合:看JAVA设计模式之事务处理 (12-19)
· Tomcat虽然受欢迎,但未来绝非高枕无忧 (12-19) · Java如何调用可执行文件和批处理命令 (12-19)
  客户需求反馈表
* 姓  名:
更多资料  了解方案  认识厂商
* 单位名称:
* 联系电话:
* 电子邮件:
  赛迪推荐  
  手机·资费 ·新品·导购·评测·手机资费·宽带
手机搜索  诺基亚 N73 MOTO Z6
  IT产品 ·笔记本·台式机·服务器·打印·投影
IT产品搜索 
  IT技术 ·开发·网管·安全·数据库·操作系统
  信息化 ·热点·专题·访谈·周刊·方案案例
· 网银交易收费 我国银行业如何达国际化标准
· 家庭信息化普及率提高 网上缴费成为新时尚
· 五条黄金准则能够让CIO巧妙加薪 CIO焦虑调查
· 网上书店解决方案 深圳边检指挥中心ITSM项目
  IT博客 ·曾剑秋·项立刚·Java学习·网管
  IT技术论坛 ·开发·网管·安全·数据库·系统