在从收藏的网资料上查到的xml4中解析方式,感觉自己也有混淆的地方。对比学习了一下。原文网址:
http://luckyapple.iteye.com/blog/455445
Javax.xml.parsers中包含
1. DocumentBuilderFactory,documentBuilder他们得出了org.w3c.dom.Document,需要加载整个XML文档(类在jre系统库rt.jar中)。
2. SAXParserFactory,SAXParser,事件驱动,需要写解析处理。不需要加载整个文档。(类在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();
}
}