如何更改XML文件[Java]中某些元素和属性的值?
我正在用SAX解析器读取一个XML文件(这一部分可以更改,这是有充分理由的) 当我找到必要的属性时,我需要更改它们的值并将结果XML文件保存为新文件如何更改XML文件[Java]中某些元素和属性的值?,java,xml,sax,Java,Xml,Sax,我正在用SAX解析器读取一个XML文件(这一部分可以更改,这是有充分理由的) 当我找到必要的属性时,我需要更改它们的值并将结果XML文件保存为新文件 我该怎么做 如果您的文档相对较小,我建议使用。您可以实例化从InputStream创建,然后使用查找要更改的节点/属性,进行修改,然后使用将修改后的文档写回 另一方面,如果您的文档太大,无法有效地保存在内存中(或者您不希望使用第三方库),您将希望继续使用SAX解析器,在读取节点时将节点流式输出到磁盘,并在读取过程中进行任何更改 您可能还想看看XSL
我该怎么做 如果您的文档相对较小,我建议使用。您可以实例化从InputStream创建,然后使用查找要更改的节点/属性,进行修改,然后使用将修改后的文档写回 另一方面,如果您的文档太大,无法有效地保存在内存中(或者您不希望使用第三方库),您将希望继续使用SAX解析器,在读取节点时将节点流式输出到磁盘,并在读取过程中进行任何更改
您可能还想看看XSLT。好的,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();
}
startDocument(){
writeStartDocument(“UTF-8”、“1.0”);
}
public void startElement(字符串namespaceURI、字符串localName、,
字符串(名称、属性和附件){
WriteStarteElement(namespaceURI、localName);
对于(int i=0;i)您可以重新打开XML流吗?或者您可以在解析之前将数据存储在缓冲区中吗?