Java Transformer,TransformerFactory会混淆多行xml注释

时间:2011-11-09 00:31:14

标签: java xml comments wowza transformer

使用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);

希望信息有所帮助!

0 个答案:

没有答案