如何更改XML文件[Java]中某些元素和属性的值?

时间:2010-10-28 20:30:58

标签: java xml sax

我正在使用SAX解析器读取XML文件(这部分可以更改它,这是一个很好的理由)。

当我找到必要的属性时,我需要更改它们的值并将生成的XML文件保存为新文件。

我该怎么做?

2 个答案:

答案 0 :(得分:7)

Afaik,SAX只是解析器。您必须选择其他库来编写XML。

如果您只是更改属性或更改元素名称而不是更改XML的结构,那么这应该是相对容易的任务。使用STaX作为作家:

// Start STaX 
OutputStream out = new FileOutputStream("data.xml");
XMLOutputFactory factory = XMLOutputFactory.newInstance();
XMLStreamWriter writer = factory.createXMLStreamWriter(out);

现在,扩展SAX DefaultHandler:

startDocument(){
    writer.writeStartDocument("UTF-8", "1.0");
}

public void startElement(String namespaceURI, String localName,
                         String qName, Attributes atts)  {

    writer.writeStartElement(namespaceURI, localName);
    for(int i=0; i<atts.getLength(); i++){
        writer.writeAttribute(atts.getQName(i), atts.getValue(i));
    }
} 

public void endElement(String uri, localName, qName){
    writer.writeEndElement();
} 

答案 1 :(得分:2)

如果您的文档相对较小,我建议您使用JDOM。您可以实例化SaxBuilder以从InputStream创建Document,然后使用Xpath查找要更改的节点/属性,进行修改,然后使用XmlOutputter将修改过的文档写回来。

另一方面,如果您的文档太大而无法有效保留在内存中(或者您不想使用第三方库),那么您将需要坚持使用SAX解析器,流出节点在你阅读它们时到磁盘,在路上做任何改变。

您可能还想看看XSLT。