当前位置:七道奇文章资讯编程技术Java编程
日期:2011-03-22 16:15:00  来源:本站整理

Java更新XML的四种常用办法简介[Java编程]

赞助商链接



  本文“Java更新XML的四种常用办法简介[Java编程]”是由七道奇为您精心收集,来源于网络转载,文章版权归文章作者所有,本站不对其观点以及内容做任何评价,请读者自行判断,以下是其具体内容:

本文扼要的谈论了Java语言编程中更新XML文档的四种常用办法,并且解析这四种办法的优劣.其次,本文还对若何掌握Java程序输出的XML文档的格局做了展开阐述.

JAXP是Java API for XML Processing的英文字头缩写,中文含义是:用于XML文档处理的利用Java语言编写的编程接口.JAXP支持DOM、SAX、XSLT等尺度.为了加强JAXP利用上的机动性,开辟者分外为JAXP计划了一个Pluggability Layer,在Pluggability Layer的支持之下,JAXP既可以和具体实现DOM API、SAX API 的各种XML解析器(XML Parser,比方Apache Xerces)结合工作,又可以和具体履行XSLT尺度的XSLT处理器(XSLT Processor,比方Apache Xalan)结合工作.利用Pluggability Layer的好处在于:我们只需求熟习JAXP各个编程接口的定义便可,而不需求对所采取的具体的XML解析器、XSLT处理器有很深化的理解.比方在某个Java程序中,通过JAXP调用XML解析器Apache Crimson对XML文档举行处理,假如我们但愿利用别的XML解析器(比方Apache Xerces),以便提高该程序的性能,那么原程序代码大概不需求任何改变,直接便可以利用(你所需求做的事情只是将包含Apache Xerces代码的jar文件加入到环境变量CLASSPATH中,而将包含Apache Crimson代码的jar文件在环境变量CLASSPATH中删除).

目前JAXP已经利用的非常广泛了,可以说是Java语言中处理XML文档的尺度API.有些初学者在学习利用JAXP的历程中,常常会提出这样的问题:我编写的程序对DOM Tree做了更新,但是当程序退出今后,原始的XML文档并没有改变,还是老模样,若何实现对原始XML文档和DOM Tree的同步更新呢?咋一看来,在JAXP中仿佛没有供应呼应的接口/办法/类,这是很多初学者都感到困惑的问题.本文的大旨就在于办理这个问题,简单的介绍几种常用的同步更新原始XML文档和DOM Tree的办法.为了缩小谈论的范围,本文所触及的XML解析器仅包含Apache Crimson和Apache Xerces,而XSLT处理器仅仅利用Apache Xalan.

办法一:直接读写XML文档

这大概是最笨最原始的办法了.当程序获得DOM Tree之后,利用DOM模子的Node接口的各个办法对DOM Tree举行更新,下一步应当对原始的XML文档举行更新了.我们可以应用递归的办法大概是利用TreeWalker类,遍历整个DOM Tree,与此同时,将DOM Tree的每一个节点/元素顺次写入到预先翻开的原始XML文档中,当DOM Tree被遍历完好之后,DOM Tree和原始的XML文档就实现了同步更新.实际中,这个办法极少利用,不过假如你要编程实现自己的XML解析器,这种办法还是有大概用得上的.

办法二:利用XmlDocument类

利用XmlDocument类?JAXP中清楚没有这个类呀!是不是作者搞错了?没有错!就是利用XmlDocument类,切当的说,是利用XmlDocument类的write()办法.

在上文已经提到过,JAXP可以和各种各样的XML解析器结合利用,这次我们选用的XML解析器是Apache Crimson.XmlDocument(org.apache.crimson.tree.XmlDocument)是Apache Crimson的一个类,并不包含于尺度的JAXP中,难怪在JAXP的文档中找不到XmlDocument类的芳踪呢.目前问题出来了,若何利用XmlDocument类来实现更新XML文档的功效?在XmlDocument类中供应了下面三个write()办法(按照Crimson最新的版本------Apache Crimson 1.1.3):

public void write (OutputStream out) throws IOException
public void write (Writer out) throws IOException
public void write (Writer out, String encoding) throws IOException

上述三个write()办法的主要作用就是输出DOM Tree中的内容到特定的输出介质中,比方文件输出流、利用程序掌握台等等.那么又若何利用上述三个write()办法呢?请看下面的Java程序代码片断:

String name="fancy";
DocumentBuilder parser;
DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
try
{
parser = factory.newDocumentBuilder();
Document doc = parser.parse("user.xml");
Element newlink=doc.createElement(name);
doc.getDocumentElement().appendChild(newlink);
((XmlDocument)doc).write(new FileOutputStream(new File("xuser1.xml")));
}
catch (Exception e)
{
//to log it
}

在上面的代码中,首先成立了一个Document对象doc,获得完好的DOM Tree,然后利用Node接口的appendChild()办法,在DOM Tree的最后追加了一个新节点(fancy),最后调用XmlDocument类的write(OutputStream out)办法,把DOM Tree中的内容输出到xuser.xml中(其实也可以输出到user.xml,更新原始的XML文档,在这里为了便于做比较,故而输出到xuser.xml文件中).需求注意的是不能直接对Document对象doc直接调用write()办法,因为JAXP的Document接口并没有定义任何write()办法,所以必须将doc由Document对象强迫转换为XmlDocument对象,然后才能调用write()办法,在上面的代码中利用的是write(OutputStream out)办法,这个办法利用缺省的UTF-8编码输出DOM Tree中的内容到特定的输出介质中,假如DOM Tree中包含中文字符,那么输出的后果有大概是乱码,亦即存在所谓的"汉字问题",办理的办法是利用write (Writer out, String encoding)办法,显式指定输出时的编码,比方将第二个参数设为"GB2312",这时即不存在"汉字问题",输出后果可以正常显示中文字符.

完好的例子请参考下列文件: AddRecord.java(见附件)、user.xml(见附件).该例子的运行环境为:Windows XP Professional、JDK 1.3.1.为了可以正常编译运行AddRecord.java这个程序,你需求到网址http://xml.apache.org/dist/crimson/去下载Apache Crimson,并将所获得的crimson.jar文件加入到环境变量CLASSPATH中.

注意:

Apache Crimson的前身是Sun Project X Parser,后来不知何故,由X Parser演变成Apache Crimson,至今Apache Crimson的很多代码都是从X Parser中直接移植过来的.比方上文用到的XmlDocument类,它在X Parser中是com.sun.xml.XmlDocument,到了Apache Crimson中摇身一变,就变成了org.apache.crimson.tree.XmlDocument类,其实它们的绝大部份代码是一样的,大概就package语句和import语句以及文件开首的一段lience有所差别罢了.早期的JAXP是和X Parser捆绑在一同的,因此一些老的程序利用了com.sun.xml包,假如你目前重新编译它们,有大概不能通过,必定就是因为这个缘由.后来的JAXP和Apache Crimson捆绑在一同,比方JAXP 1.1,假如你利用JAXP 1.1,那么不需求额外下载Apache Crimson,也可以正常编译运行上面的例子(AddRecord.java).最新的JAXP 1.2 EA(Early Access)改弦更张,采取性能更好的Apache Xalan和Apache Xerces辨别作为XSLT处理器和XML解析器,不能直接支持Apache Crimson了,所以假如你的开辟环境采取了JAXP 1.2 EA大概是Java XML Pack(内含JAXP 1.2 EA),那么将无法直接编译运行上面的例子(AddRecord.java),你需求额外下载并安装Apache Crimson.


  以上是“Java更新XML的四种常用办法简介[Java编程]”的内容,如果你对以上该文章内容感兴趣,你可以看看七道奇为您推荐以下文章:

  • 利用Javascript实现网页水印(非图片水印)
  • Java开辟环境的搭建
  • Ubuntu java安装与配置
  • 办理Ubuntu 10.04 Firefox3.6 Java浏览器插件不工作的问
  • Ubuntu重装后Java环境的设置
  • Sun Java进入Ubuntu 10.10软件中央
  • Ubuntu 10.10配置Java开辟环境
  • 在Ubuntu 10.10中配置Java环境变量的办法
  • Ubuntu下Java环境的搭建
  • Ubuntu 10.04 下安装 Java, JRE
  • Ubuntu 10.04下的搭建SUN JAVA开辟环境
  • Ubuntu 12.04安装java7
  • 本文地址: 与您的QQ/BBS好友分享!
    • 好的评价 如果您觉得此文章好,就请您
        0%(0)
    • 差的评价 如果您觉得此文章差,就请您
        0%(0)

    文章评论评论内容只代表网友观点,与本站立场无关!

       评论摘要(共 0 条,得分 0 分,平均 0 分) 查看完整评论
    Copyright © 2020-2022 www.xiamiku.com. All Rights Reserved .