java解析xml再生成xml

<?xml version="1.0" encoding="utf-8"?>
<resources>
<string name="app_name">EX03_08</string>
<string name="menu_settings">Settings</string>
<string name="string01">This is Layout 1!!!</string>
<string name="string02">This is Layout 2!!!</string>
</resources>
求大神帮忙把这个xml用sax解析后删除 <string name="string02">This is Layout 2!!!</string>后再生成新的xml
解析并删除后,得到一个ArrayList<Map<String, String>> list为[{string=EX03_08, name=app_name}, {string=Settings,name=menu_settings}, {string=This is Layout 1!!!, name=string01}的list。现在的问题是根据这我不能再次生成我想要的xml文件

1.DOM生成和解析XML文档

为 XML 文档的已解析版本定义了一组接口。解析器读入整个文档,然后构建一个驻留内存的树结构,然后代码就可以使用 DOM
接口来操作这个树结构。优点:整个文档树在内存中,便于操作;支持删除、修改、重新排列等多种功能;缺点:将整个文档调入内存(包括无用的节点),浪费时间和空间;使用场合:一旦解析了文档还需多次访问这些数据;硬件资源充足(内存、CPU)。

2.SAX生成和解析XML文档

为解决DOM的问题,出现了SAX。SAX
,事件驱动。当解析器发现元素开始、元素结束、文本、文档的开始或结束等时,发送事件,程序员编写响应这些事件的代码,保存数据。优点:不用事先调入整个文档,占用资源少;SAX解析器代码比DOM解析器代码小,适于Applet,下载。缺点:不是持久的;事件过后,若没保存数据,那么数据就丢了;无状态性;从事件中只能得到文本,但不知该文本属于哪个元素;使用场合:Applet;只需XML文档的少量内容,很少回头访问;机器内存少;

3.DOM4J生成和解析XML文档

DOM4J 是一个非常非常优秀的Java XML
API,具有性能优异、功能强大和极端易用使用的特点,同时它也是一个开放源代码的软件。如今你可以看到越来越多的 Java 软件都在使用 DOM4J 来读写
XML,特别值得一提的是连 Sun 的 JAXM 也在用 DOM4J。

4.JDOM生成和解析XML
为减少DOM、SAX的编码量,出现了JDOM;优点:20-80原则,极大减少了代码量。使用场合:要实现的功能简单,如解析、创建等,但在底层,JDOM还是使用SAX(最常用)、DOM、Xanan文档。
新技术目前还木有,就是有了也不稳定,你也不敢用阿。追问

解析并删除后,得到一个ArrayList> list为[{string=EX03_08, name=app_name}, {string=Settings,name=menu_settings}, {string=This is Layout 1!!!, name=string01}的list。现在的问题是根据这我不能再次生成我想要的xml文件

解析并删除后,得到一个ArrayList> list为[{string=EX03_08, name=app_name}, {string=Settings,name=menu_settings}, {string=This is Layout 1!!!, name=string01}的list。现在的问题是根据这我不能再次生成我想要的xml文件

温馨提示:答案为网友推荐,仅供参考
第1个回答  2014-08-13
1.DOM生成和解析XML文档

为 XML 文档的已解析版本定义了一组接口。解析器读入整个文档,然后构建一个驻留内存的树结构,然后代码就可以使用 DOM
接口来操作这个树结构。优点:整个文档树在内存中,便于操作;支持删除、修改、重新排列等多种功能;缺点:将整个文档调入内存(包括无用的节点),浪费时间和空间;使用场合:一旦解析了文档还需多次访问这些数据;硬件资源充足(内存、CPU)。

2.SAX生成和解析XML文档

为解决DOM的问题,出现了SAX。SAX
,事件驱动。当解析器发现元素开始、元素结束、文本、文档的开始或结束等时,发送事件,程序员编写响应这些事件的代码,保存数据。优点:不用事先调入整个文档,占用资源少;SAX解析器代码比DOM解析器代码小,适于Applet,下载。缺点:不是持久的;事件过后,若没保存数据,那么数据就丢了;无状态性;从事件中只能得到文本,但不知该文本属于哪个元素;使用场合:Applet;只需XML文档的少量内容,很少回头访问;机器内存少;

3.DOM4J生成和解析XML文档

DOM4J 是一个非常非常优秀的Java XML
API,具有性能优异、功能强大和极端易用使用的特点,同时它也是一个开放源代码的软件。如今你可以看到越来越多的 Java 软件都在使用 DOM4J 来读写
XML,特别值得一提的是连 Sun 的 JAXM 也在用 DOM4J。

4.JDOM生成和解析XML
为减少DOM、SAX的编码量,出现了JDOM;优点:20-80原则,极大减少了代码量。使用场合:要实现的功能简单,如解析、创建等,但在底层,JDOM还是使用SAX(最常用)、DOM、Xanan文档。
新技术目前还木有,就是有了也不稳定,你也不敢用阿。

追问

解析并删除后,得到一个ArrayList<Map<String, String>> list为[{string=EX03_08, name=app_name}, {string=Settings,name=menu_settings}, {string=This is Layout 1!!!, name=string01}的list。现在的问题是根据这我不能再次生成我想要的xml文件

解析并删除后,得到一个ArrayList<Map<String, String>> list为[{string=EX03_08, name=app_name}, {string=Settings,name=menu_settings}, {string=This is Layout 1!!!, name=string01}的list。现在的问题是根据这我不能再次生成我想要的xml文件
第2个回答  2014-08-13
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.UnsupportedEncodingException;
import java.util.List;

import org.dom4j.Document;
import org.dom4j.DocumentException;
import org.dom4j.Element;
import org.dom4j.io.OutputFormat;
import org.dom4j.io.SAXReader;
import org.dom4j.io.XMLWriter;

/**
 *
 * @author xi
 * @since Aug 13, 2014
 */
public class XMLParse {

    public static void main(final String[] args) {
        final String xmlPath = "./test.xml";
        final String xmlPath1 = "./test1.xml";
        //
        // read
        final SAXReader reader = new SAXReader();
        Document doc;
        try {
            doc = reader.read(new File(xmlPath));
        } catch (final DocumentException e) {
            e.printStackTrace();
            return;
        }
        //
        // search and remove element
        final List<?> lst = doc
                .selectNodes("/resources/string[@name='string02']");
        if (lst.size() == 1) {
            final Element elem = (Element) lst.get(0);
            elem.getParent().remove(elem);
        }
        //
        // writer to xml file
        final OutputFormat format = OutputFormat.createPrettyPrint();
        format.setEncoding("UTF-8");
        XMLWriter writer;
        try {
            writer = new XMLWriter(new FileOutputStream(xmlPath1), format);
            writer.write(doc);
        } catch (final UnsupportedEncodingException e1) {
            e1.printStackTrace();
        } catch (final IOException e) {
            e.printStackTrace();
        }
        return;
    }

}

你需要两个jar包,dom4j和jaxen