CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
山寨机中的战斗机! 程序优化工程师到底对IT界有没有贡献
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  Java >  Web Services / XML

如何用java从xml文件中提取数据

楼主Javatomchen()2002-05-10 21:04:57 在 Java / Web Services / XML 提问

如何用java从xml文件中提取数据 问题点数:20、回复次数:4Top

1 楼wangwenyou(王文友)回复于 2002-05-10 21:09:55 得分 0

Xml.apache.org  
  jdom.org  
  Xerces、Jaxp或JDomTop

2 楼wangwenyou(王文友)回复于 2002-05-10 21:11:16 得分 5

/**  
            *     根据文件路径建立DOM   Document对象。  
            *  
            *@param     name                       文件名  
            *@return                                 org.w3c.dom.Document  
            *@exception     Exception     打开文件出错时抛出  
            */  
          public   org.w3c.dom.Document   getDocument(   String   name   )  
                                                                            throws   Exception  
          {  
   
                          String   uri   =   "file:"   +   new   File(   name   ).getAbsolutePath();  
   
                          //   使用JAXP作为解析器  
                          DocumentBuilderFactory   dbf   =   DocumentBuilderFactory.newInstance();  
                          javax.xml.parsers.DocumentBuilder   db   =   dbf.newDocumentBuilder();  
                          org.w3c.dom.Document   document   =   db.parse(   uri   );  
   
                          return   document;  
   
          }Top

3 楼wangwenyou(王文友)回复于 2002-05-10 21:12:59 得分 0

以上是一个典型的使用Jaxp解析Xml文件示例,你可以使用DOM对解析得到的Xml   Document处理数据。Top

4 楼Dickensi(流星·逐日)(★★★★)回复于 2002-05-10 21:36:28 得分 15

Java   +   XML   =   JDOM   !  
  这就是JDOM设计者的目标。如果你曾经使用过烦人的SAX或是DOM来处理XML,你就会知道为什么要有JDOM或者是JAXB。在今年(2002)的JavaOne会议上JDOM的主要创始人Jason   Hunter有一篇精彩的演讲介绍了JDOM技术,题目就是JDOM   Makes   XML   Easy。  
  在那篇文档里,JDOM被拿来与DOM比较,而我更愿意拿它同JAXB比较。因为JAXB和JDOM都是为了在Java中提供比DOM和SAX更为方便的XML处理接口而开发的,并且通过完全不同的途径来解决这个问题。JDOM的处理方式是与DOM类似的树操作。而JAXB通过DTD和绑定模式来生成访问XML文档的Java代码,将XML映射成了Java对象来操作。你可以根据项目的需要和个人喜好来决定采用哪一个。  
  JDOM与JAXB的比较,从本身的特点来看:  
  1)   JDOM比JAXB更容易上手。使用JAXB首先要会编写DTD,然后还要会编写绑定模式。JDOM没有这样的要求,如果你会Java和XML,甚至可以说光是看JDOM的javadoc文档就能够使用JDOM。  
  2)   JAXB编写好DTD和绑定模式以后,XML文档被映射成了Java对象,其数据就是Java对象的属性,连数据类型都做好了转换,因此,访问XML文档比JDOM要简便,可以说是一劳永逸。  
  3)   JAXB由某个DTD和绑定模式生成的代码只能访问该DTD所约束的文档。如果想要访问其他XML文档,需要再编写DTD和绑定模式。JDOM可以处理任何XML文档,包括受约束的和不受约束的。  
   
  目前JDOM和JAXB都没有正式版本。JDOM的最新版本是beta8,JAXB是1.0   early   access,其规范版本是0.21。相对而言,JDOM更成熟一些。例如JAXB不支持名字空间、不能向XML文档写入处理指令,有时我们需要保留的换行符和首尾空格在JAXB中自动过滤掉了,就连放在<![CDATA[   和   ]]>里面也不能幸免。JDOM就没有这些限制。如果说以上的3点比较是JDOM和JAXB本身的特点所决定的,几乎不可能改变,那么这里表明,JAXB还需要更多的工作。  
   
  (二)获得并安装JDOM  
  在http://jdom.org可以下载JDOM的最新版本。以JDOM   beta8的2进制版本为例。下载后解压缩,JDOM的jar文件就是build目录下的文件jdom.jar,将之加入类路径。另外JDOM还需要lib目录下那些jar文件如xerces.jar的支持。如果在使用中出现以下错误:  
  java.lang.NoSuchMethodError  
  或    
  java.lang.NoClassDefFoundError:   org/xml/sax/SAXNotRecognizedException  
  你需要保证xerces.jar文件在CLASSPATH中位于其他XML类,如JAXP或Crimson之前,这些类文件,包括以前老版本的xerces,可能不支持SAX2.0或DOM   Level   2。于是导致了上面的错误。  
   
  (三)一个简单的例子  
  JDOM的处理方式有些类似于DOM,但它主要是用SAX实现的,你不必担心处理速度和内存的问题。另外,JDOM中几乎没有接口,的类全部是实实在在的类,没有类工厂类的。其最重要的一个包org.jdom中主要有以下类:  
  ?   Attribute  
  ?   CDATA  
  ?   Comment  
  ?   DocType  
  ?   Document  
  ?   Element  
  ?   EntityRef  
  ?   Namespace  
  ?   ProcessingInstruction  
  ?   Text  
  数据输入要用到XML文档要通过org.jdom.input包,反过来需要org.jdom.output。如前面所说,关是看API文档就能够使用。  
  我们的例子读入XML文件exampleA.xml,加入一条处理指令,修改第一本书的价格和作者,并添加一条属性,然后写入文件exampleB.xml:  
  //exampleA.xml  
  <?xml   version="1.0"   encoding="GBK"?>  
  <bookList>  
          <book>  
                  <name>Java编程入门</name>  
                  <author>张三</author>  
                  <publishDate>2002-6-6</publishDate>  
                  <price>35.0</price>  
          </book>  
          <book>  
                  <name>XML在Java中的应用</name>  
                  <author>李四</author>  
                  <publishDate>2002-9-16</publishDate>  
                  <price>92.0</price>  
          </book>  
  </bookList>  
   
  //testJDOM.java  
  import   org.jdom.*;  
  import   org.jdom.output.*;  
  import   org.jdom.input.*;  
  import   java.io.*;  
  public   class   TestJDOM{  
          public   static   void   main(String   args[])throws   Exception{  
                   
                  SAXBuilder   sb   =   new   SAXBuilder();  
   
                  //从文件构造一个Document,因为XML文件中已经指定了编码,所以这里不必了  
                  Document   doc   =   sb.build(new   FileInputStream("exampleA.xml"));  
                   
                  //加入一条处理指令  
                  ProcessingInstruction   pi   =   new   ProcessingInstruction  
                          ("xml-stylesheet","href=\"bookList.html.xsl\"   type=\"text/xsl\"");  
                  doc.addContent(pi);  
   
   
                  Element   root   =   doc.getRootElement();   //得到根元素  
                  java.util.List   books   =   root.getChildren();   //得到根元素所有子元素的集合  
                  Element   book   =   (Element)books.get(0);   //得到第一个book元素  
                  //为第一本书添加一条属性  
                  Attribute   a   =   new   Attribute("hot","true");      
                  book.setAttribute(a);  
                  Element   author   =   book.getChild("author");   //得到指定的字元素  
                  author.setText("王五");   //将作者改为王五  
                  //或   Text   t   =   new   Text("王五");book.addContent(t);  
                  Element   price   =   book.getChild("price");   //得到指定的字元素  
                  //修改价格,比较郁闷的是我们必须自己转换数据类型,而这正是JAXB的优势  
                  author.setText(Float.toString(50.0f));    
                   
   
   
                  String   indent   =   "         ";  
                  boolean   newLines   =   true;  
                  XMLOutputter   outp   =   new   XMLOutputter(indent,newLines,"GBK");  
                  outp.output(doc,   new   FileOutputStream("exampleB.xml"));  
   
          }  
  };  
   
  执行结果exampleB.xml:  
  <?xml   version="1.0"   encoding="GBK"?>  
  <bookList>  
          <book   hot=”true”>  
                  <name>Java编程入门</name>  
                  <author>50.0</author>  
                  <publishDate>2002-6-6</publishDate>  
                  <price>35.0</price>  
          </book>  
          <book>  
                  <name>XML在Java中的应用</name>  
                  <author>李四</author>  
                  <publishDate>2002-9-16</publishDate>  
                  <price>92.0</price>  
          </book>  
  </bookList>  
  <?xml-stylesheet   href="bookList.html.xsl"   type="text/xsl"?>  
   
  在默认情况下,JDOM的Element类的getText()这类的方法不会过滤空白字符,如果你需要过滤,用setTextTrim()   。  
  Top

相关问题

  • 怎样从xml文件中提取数据?
  • [跪求]怎样用asp提取xml文件节点的值?
  • 如何从一个xml文件中只提取需要的元素?
  • 请问,在xsl中如何 从两个xml文件中提取数据
  • 利用XSL如何提取XML文件中的前十条数据?
  • 如何提取文件名?
  • [Perl]文件的提取
  • 提取异地文件
  • 在线等,如何从access数据库中用ASP提取一个xml文档并保存为XML文件?
  • java对xml文件的读写操作!!!!

关键词

  • w3c
  • 文件
  • 文档
  • 数据
  • 版本
  • 模式
  • java
  • 指令
  • 属性
  • jdom

得分解答快速导航

  • 帖主:Javatomchen
  • wangwenyou
  • Dickensi

相关链接

  • CSDN Java频道
  • Java类图书
  • Java类源码下载

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
北京创新乐知广告有限公司 版权所有, 京 ICP 证 070598 号
世纪乐知(北京)网络技术有限公司 提供技术支持
Copyright © 2000-2008, CSDN.NET, All Rights Reserved
GongshangLogo