java 4种XML解析方式比较

在从收藏的网资料上查到的xml4中解析方式,感觉自己也有混淆的地方。对比学习了一下。原文网址:

http://luckyapple.iteye.com/blog/455445

Javax.xml.parsers中包含

1.       DocumentBuilderFactorydocumentBuilder他们得出了org.w3c.dom.Document,需要加载整个XML文档(类在jre系统库rt.jar中)。

2.       SAXParserFactorySAXParser,事件驱动,需要写解析处理。不需要加载整个文档。(类在jre系统库rt.jar中)

3.       JDOM需要下载jar包。从接口转为具体类,大量使用collections,目的是使用20%(或更少) 的精力解决80%(或更多)Java/XML问题。

4.       Dom4j需要下载插件dom4j.jar,是JDOM的一个智能分支。它合并了许多超出基本XML文档表示的功能,包括集成的XPath支持、 XML Schema支持以及用于大文档或流化文档的基于事件的处理。具有性能优异、功能强大和极端易用使用的特点。(有移植性问题)

 5. 根据在Updater.java中两个解析xml的方法进行验证:

 

使用代码

本地文件

网络文件

使用方式

测试文件

W3C.dom

DocumentBuilder parser = DocumentBuilderFactory.newInstance().newDocumentBuilder();

            document = parser.parse(“e:/site.xml”);

       //Element root = document.getDocumentElement();

            Element root = (Element)document.getFirstChild();

            NodeList l = root.getElementsByTagName("feature");

e:/site.xml

通过

http://10.80.68.10:8080 /xxx/site.xml

不通过

Main()方法中读取

Site.xml

Dom4j

SAXReader saxReader = new SAXReader();

document = saxReader.read(new File(“e:/feature.xml”));

org.dom4j.Element root = document.getRootElement();

            List<?> elements = root.elements("plugin");

 

e:/feature.xml

通过

http://10.80.68.10:8080 /xxx/feature.xml

不通过

Main()方法中读取

 

Feature.xml

W3C.dom

URL url = new URL(destUrl);

             // 获取网络输入流

             bis = new BufferedInputStream(url.openStream());

 

DocumentBuilder parser = DocumentBuilderFactory.newInstance().newDocumentBuilder();

            document = parser.parse(bis);

e:/site.xml

不通过

http://10.80.68.10:8080 /xxx/site.xml

通过

Main()方法中读取

 

 

Dom

4j

SAXReader saxReader = new SAXReader();

            document = saxReader.read(new URL(featureFile));

e:/feature.xml

不通过

http://10.80.68.10:8080 /xxx/feature.xml

通过

Main()方法中读取

 

 

 

w3c.dom,parser在解析时如果参数为字符串,那么应该是uri的字符串,而不是本地文件绝对路径的字符串(需要验证)

古老的W3c.dom在写出xml时的方法已经忘了,这里做个例子。

privatestaticvoid writeDocumentWithW3Cdom(org.w3c.dom.Document document,String outPath)

    {

        try

        {

            FileWriter out = new FileWriter(outPath);

            DOMSource domSource = new DOMSource(document);

            StreamResult streamResult = new StreamResult(out);

 

            TransformerFactory tf = TransformerFactory.newInstance();

            Transformer serializer = tf.newTransformer();

            // set encoding from a command argument

            serializer.setOutputProperty(OutputKeys.ENCODING, "UTF-8");

            serializer.setOutputProperty(OutputKeys.INDENT, "no");

            serializer.setOutputProperty(OutputKeys.METHOD, "xml");

            serializer.transform(domSource, streamResult);

            out.close();

//创建w3c.document的节点

            //Element stu = doc.createElement("学生");

            //stu.setAttribute("性别", s.getSex());

            //root.appendChild(stu);// 添加属性  

       

            // 创建文本姓名节点

            //Element name = doc.createElement("姓名");

            //stu.appendChild(name);

            //Text tname = doc.createTextNode(s.getName());

            //name.appendChild(tname);

        }

        catch (Exception e)

        {

            e.printStackTrace();

        }

    }

 

你可能感兴趣的:(xml解析,4种)