Java Transformer, TransformerFactory портит многострочные комментарии XML - PullRequest
2 голосов
/ 09 ноября 2011

У меня возникли проблемы с использованием Transformer / TransformerFactory для обновления существующего XML-файла (на сервере Wowza). Он отлично работает и корректно обновляется, но создает беспорядок в многострочных комментариях.

Комментарии начинаются так:

<!--StorageDir path variables   
${com.wowza.wms.AppHome} - Application home directory   
${com.wowza.wms.ConfigHome} - Configuration home directory      
${com.wowza.wms.context.VHost} - Virtual host name  
${com.wowza.wms.context.VHostConfigHome} - Virtual host config directory        
${com.wowza.wms.context.Application} - Application name     
${com.wowza.wms.context.ApplicationInstance} - Application instance name        
-->

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

Это код, который я использую для обновления XML (просто фрагмент):

TransformerFactory tFactory = TransformerFactory.newInstance();
tFactory.setAttribute("indent-number", new Integer(4));
Transformer transformer = tFactory.newTransformer();
transformer.setOutputProperty(OutputKeys.OMIT_XML_DECLARATION, "yes");
transformer.setOutputProperty(OutputKeys.METHOD, "xml");
transformer.setOutputProperty(OutputKeys.INDENT, "yes");

DOMSource source = new DOMSource(document);
File outFile = new File(path.getPath() + "/Application.xml");
FileOutputStream outputStream = new FileOutputStream(outFile);

StreamResult result = new StreamResult(new OutputStreamWriter(outputStream));
transformer.transform(source, result);

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

Любой вход? Как я могу заставить трансформаторов перестать искажать мои комментарии? Спасибо большое! :)

РЕДАКТИРОВАТЬ: Вот как изначально создается документ (где appXML - путь к файлу Application.xml, который будет редактироваться):

Document document;
DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
DocumentBuilder builder = factory.newDocumentBuilder();
document = builder.parse(appXML);

После этого я делаю много специфичных для узла изменений ... их слишком много, чтобы разместить их здесь, но есть форматы, за которыми следуют все изменения:

Смена узла:

Node streamType = document.getElementsByTagName("StreamType").item(0);  
streamType.setTextContent(mountType);   

Добавление дочернего элемента

Node nameNode = document.createElement("Name");
nameNode.appendChild(document.createTextNode("utilities"));

Node module = document.createElement("Module");
module.appendChild(nameNode);

Element modules = (Element)document.getElementsByTagName("Modules").item(0);
modules.appendChild(module);

Надеюсь, эта информация поможет!

...