【问题标题】:How to change values of some elements and attributes in an XML file [Java]?如何更改 XML 文件 [Java] 中某些元素和属性的值?
【发布时间】:2010-10-28 20:30:57
【问题描述】:

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

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

我该怎么做?

【问题讨论】:

  • 你能重新打开 XML 流吗?或者您是否可以在解析之前将数据存储在缓冲区中?

标签: java xml sax


【解决方案1】:

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();
} 

【讨论】:

    【解决方案2】:

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

    另一方面,如果您的文档太大而无法有效地保存在内存中(或者您不想使用第 3 方库),则您需要坚持使用 SAX 解析器,将节点流式传输出去在您阅读它们时将其写入磁盘,并在途中进行任何更改。

    您可能还想看看 XSLT。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-04-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-06-21
      • 2014-01-12
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多