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

ASP.NET
asp.net SqlParameter关于Like的传参数无效问题
数据库 数据类型float到C#类型decimal, float数据类型转化无效
google suggest 下拉菜单实现代码(asp.net版本)
asp.net(C#) 动态添加非ASP的标准html控件(如添加Script标签)
asp.net GridView导出到Excel代码
asp.net 开发的一些常用技巧
php 三级联动菜单
ASp.net 文本框(TextBox)计算,判断输入的是否是数字
asp.net 存储过程调用
asp.net 操作XML 按指定格式写入XML数据 WriteXml
asp.net连接数据库 增加,修改,删除,查询代码
VB.net 查询获取数据库数据信息
asp.net 删除,更新数据库方法
.net获取硬件信息_CPU序列号
ASP.NET 页面中动态增加的控件、添加事件
彻底解决ASP.NET MD5加密中文结果和ASP不一致的问题
asp.net结合aspnetpager使用SQL2005的存储过程分页
asp.net 用户控件读取以及赋值
asp.net 弹出警告窗口实现代码
asp.net 枚举文件里面的数字绑定到DropDownList里面去

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


出处:互联网   整理: 软晨网(RuanChen.com)   发布: 2009-11-03   浏览: 181 ::
收藏到网摘: 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