Java XML转换器 - 保留输出中的注释

时间:2017-08-24 19:00:09

标签: java xml

我需要修改XML文件,但所有注释都在输出中修剪。我搜索并认为我需要使用Transformer.setProperty()函数,但不知道如何使用它。任何帮助或提示将非常感谢。请简单介绍一下XML术语,因为我是一个XML新手。

谢谢,

下面是我要保留的部分,从XML文件的开头开始:     

<!DOCTYPE ProductDataeXchangePackage [
<!-- DTD for IPC-2571
 Public Identifier: "-//IPC//DTD 2571 200111//EN"
 Official Location: http://webstds.ipc.org/2571.dtd -->

<!ELEMENT AdditionalAttribute EMPTY>

<!ATTLIST AdditionalAttribute  name        CDATA  #REQUIRED
                           value       CDATA  #REQUIRED
                           dimension   CDATA  #IMPLIED
                           dataType       (String | 
                                           Boolean | 
                                           Float | 
                                           Double | 
                                           Decimal | 
                                           DateTime | 
                                           Binary | 
                                           UriReference | 
                                           Other )  #IMPLIED
                             dataTypeOther CDATA  #IMPLIED
                             description CDATA  #IMPLIED >
<!ELEMENT AdditionalAttributes (AdditionalAttribute+)>
]>

<?pdx_version 1.0?>
<?generated_by Oracle/Extract/9.3.4/63?>
.....

这是我的代码,它将其重新写入另一个文件:

TransformerFactory transfac = TransformerFactory.newInstance();
Transformer trans = null;
try {
    trans = transfac.newTransformer();
    -->trans.setOutputProperty(OutputKeys.CDATA_SECTION_ELEMENTS, "??")<-- ;
} catch (TransformerConfigurationException e1) {
    // TODO Auto-generated catch block
    e1.printStackTrace();
}
StringWriter sw = new StringWriter();
StreamResult result = new StreamResult(sw);

DOMSource source = new DOMSource(doc);
try {
    trans.transform(source, result);
} catch (TransformerException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
}
String xmlString = sw.toString();
OutputStream f0;
byte buf[] = xmlString.getBytes();
f0 = new FileOutputStream("pdx1.xml");
for(int n=0;n<buf.length;n++) {
    f0.write(buf[n]);
}
f0.close();
buf = null;

1 个答案:

答案 0 :(得分:1)

DTD不是XSLT / XPath数据模型的一部分,因此XSLT转换不会保留它。它有一些方法,但它们依赖于某些工具或扩展。当您使用Java并且只使用默认转换器来序列化某些DOM树时,您可能首先要检查LSSerializerhttps://docs.oracle.com/javase/8/docs/api/org/w3c/dom/ls/LSSerializer.html)是否比默认Transformer做得更好,以输出DTD和/或CDATA部分节点。