Как изменить значения некоторых элементов и атрибутов в файле XML [Java]? - PullRequest
3 голосов
/ 29 октября 2010

Я читаю XML-файл с помощью SAX-парсера (эту часть можно изменить, если для этого есть веская причина).

Когда я нахожу необходимые свойства, мне нужно изменить их значения и сохранить полученный XML-файл как новый файл.

Как я могу это сделать?

Ответы [ 2 ]

7 голосов
/ 29 октября 2010

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 голосов
/ 29 октября 2010

Если ваш документ относительно небольшой, я бы рекомендовал использовать JDOM .Вы можете создать экземпляр SaxBuilder для создания Document из InputStream, а затем использовать Xpath , чтобы найти узел / атрибуты, которые вы хотите изменить, внести свои изменения изатем используйте XmlOutputter , чтобы выписать измененный документ обратно.

С другой стороны, если ваш документ слишком велик для эффективного хранения в памяти (или вы предпочитаете не использовать третийparty party), вы захотите придерживаться парсера SAX, транслируя узлы на диск по мере их чтения, внося любые изменения в пути.

Возможно, вы также захотите взглянуть на XSLT.

...