当前位置: 首页 > 图文教程 > 网络编程 > ASP.NET > 关于JAXP,DOM,SAX,JDOM,DOM4J的一些想法

ASP.NET
使用函数传递参数来执行相应的数据库操作
如何实现在窗体和窗体之间进行传递数据
ASP.NET中文显示之两种解决方法
ASP.NET、JSP及PHP之间的抉择
ASP.NET 2.0发送电子邮件中存在的问题
谈谈HtmlControl与WebControl的区别与用途
从ASP.NET 1.1升级到ASP.NET 2.0要考虑的Cookie问题
通过系统配置来提高ASP.NET应用程序的稳定性
妙用ASP2.0中的URL映射改变网址
AJAX实现web页面中级联菜单的设计
ASP.NET跨页面传值技巧总结
再议ASP.NET DataGrid控件中的“添加新行”功能
Geometry 对象浅析
重构CollapsibleSplitter
如何利用.NET Framework使用RSS feed
ASP.NET获取IP与MAC地址的方法
在ASP.NET 2.0中使用样式、主题和皮肤
ASP.NET中为GridView添加删除提示框
ASP.NET 2.0,无刷新页面新境界
看看一个.net版对话框控件

ASP.NET 中的 关于JAXP,DOM,SAX,JDOM,DOM4J的一些想法


出处:互联网   整理: 软晨网(RuanChen.com)   发布: 2009-11-03   浏览: 191 ::
收藏到网摘: n/a

关于JAXP,DOM,SAX,JDOM,DOM4J的一些想法
这些API是XSLT的关键部分,它们构建在DOM和SAX解析器基础上。Sun在XML领域总是后知后觉,等到Sun重视XML的时候,XML的API早就满天 飞了,尤其是IBM具有非常大的领先优势。不过Sun是规范的制订者,于是参考W3C的标准制订了JAXP规范。JAXP不像Xerces和Crimon那样,它只是一个spec,本身是不做任何事情的,它的作用就是提出一个统一的接口,让其它的XML API都来遵循JAXP编程,那么用JAXP写出来的程序,底层的API可以任意切换。具体来说JAXP包括了几个工厂类,这就是JDK1.4里面的javax.xml.parsers 包,用来寻找符合DOM标准的XML API实现类的位置;此外JAXP还包括一整套interface,这就是JDK1.4里面的org.w3c.dom那几个包。工厂类负责加载DOM的实现类。当你严格采用JAXP编程的时候,是遵循W3C的DOm标准的,那么在JAXP底层你实际上可以任意切换不同的DOM实现,例如Xerces,或者Crimon,再或者其它,切换方法就是配置jaxp.properties。因此JAXP就是一些标准接口而已。 JAXP应用程序 -> JAXP接口 -> Xerces DOM实现 -> Xerces DOM/SAX 解析器JAXP应用程序 -> JAXP接口 -> Crimson DOM实现 -> Crimson DOM/SAX 解析器JAXP应用程序 -> JAXP接口 -> Crimson DOM实现 -> Xerces DOM/SAX 解析器 W3C的DOM标准API难用的让人想撞墙,于是有一帮人开发Java专用的XML API目的是为了便于使用,这就是jdom的由来,开发到一半的时候,另一部分人又分了出来,他们有自己的想法,于是他们就去开发dom4j,形成了今天这样两个API,至于他们之间的性能,功能之比较看看上面我推荐的文章就知道了,jdom全面惨败。jdom 相当于上面的 JAXP接口 + Xerces DOM实现部分,它本身没有解析器,它可以使用Xerces或者Crimson的解析器 jdom应用程序 -> jdom API -> Xerces/Crimson解析器dom4j应用程序 -> dom4j API -> Xerces/Crimson解析器dom4j应用程序 -> dom4j API -> Alfred2解析器 因此可以看出采用dom4j/jdom编写的应用程序,已经不具备可移植性了。Sun是JAXP标准的制订者,甚至很执著的在JDK1.4里面绑定Crimson DOM实现和解析器,然后可笑的是,Sun自己的JAXM RI竟然不是用JAXP写出来的,而是dom4j 我的举例:1. 仅仅是XSL转换。XMLàHTML,通过XSLImport javax.xml.transform.TransformerFactory;Import javax.xml.transform.Transformer;Import javax.xml.stream.StreamSource;Import javax.xml.stream.StreamResult;import java.io.FileOutputStream;TransformerFactory transFactory = TransformerFactory.newInstance();Transform transformer = transFacyory.newTransformer(new StreamSource(XMLSheetName));Transformer.transform(new StreamSource(XMLFileName),new StreamResult(new FileOutputStream(outputURL)));这里的stream是一个DOM对象。我感觉这个就是JAXP应用程序 -> JAXP接口 -> Xerces DOM实现 -> Xerces DOM/SAX 解析器,不知道对不对。 2.遍历XML,通过DOM。不仅仅是XSL转换。中间有对XML元素内容的操作。Import javax.xml.transform.TransformerFactory;Import javax.xml.transform.Transformer;Import javax.xml.stream.StreamSource;Import javax.xml.stream.StreamResult;import java.io.FileOutputStream;//Xerces解析器来完成DOM遍历XML.DOMParser是Xerces包的一部分。Import org.apache.xerces.parsers.DOMParser;Import org.w3c.dom.Document;Import org.w3c.dom.NodeList; //DOM遍历XMLDOMParser parser = new DOMParser();Parser.parse(XMLFileName);//解析并在内存中创建XML树。Document document = parser.getDocument();//通过Document对象,可以使用内存中的树。NodeList products = document.getElementByTagName(“product_id”);Int num_products = products.getLength(); //XSL转化器TransformerFactory transFactory = TransformerFactory.newInstance();Transform transformer = transFacyory.newTransformer(new StreamSource(XMLSheetName));Transformer.transform(new StreamSource(XMLFileName),new StreamResult(new FileOutputStream(outputURL))); 我感觉XSL转化和对XML对象的操作是两个过程。可以分别对待。最重要的是对对象的操作。这也就是为什么有DOM,JDOM,DOM4J。转化好像只需要JAXP就可以了,关心的是StreamSource和StreamResult。这两个是DOM对象。 3.JDOM使用,生成Document内容并保存到XML文件。import org.jdom.Element;import org.jdom.Document;//和Import org.w3c.dom.Document对比一下。一个是JAXP的一个是JDOM的Documentimport org.jdom.output.XMLOutputter; Element root = Element(“orders”);root.addContent(“ ”);org.jdom.Document document = new Document(root);//创建JDOM树。 FileOutputS