2017-07-04 66 views
1

我寫了一段代碼來生成XML文件。我堅持爲XML定義doctype,因爲它應該是公開的。我能夠成功地獲得SYSTEM doctype,但無法獲得用XML編寫的公共文檔。下面以SYSTEM的doctype代碼工作,但公衆的文檔類型相同片段不工作:DOM XML公共Doctype不會出現在結果xml文件中

String xmldestpath = "C:/failed/tester.xml"; 
     doctype2 = CreateDoctypeString(); 

     StreamResult result = new StreamResult(new File(xmldestpath)); 
      try { 
       transformer = transformerFactory.newTransformer(); 
       transformer.setOutputProperty(OutputKeys.DOCTYPE_SYSTEM,"TEST"); 
       transformer.transform(source, result); 
    //  logger.debug("COMPLETED Copying xml files /....!!");    

      System.out.println("COMPLETED Copying xml files to bulk import....!!"); 

不工作片段。它不給錯誤,但沒有DOCTYPE是出現在生成的XML:

+1

答案在https://stackoverflow.com/questions/13553614/how-to-add-doctype-in​​-xml-document-using-dom-java/23688424#23688424似乎相關 – sideshowbarker

回答

0

如果你知道你需要/想PUBLIC,或許你應該知道,公衆的文字不能沒有文字系統存在。

XML specification顯示:

ExternalID ::= 'SYSTEM' S SystemLiteral 
       | 'PUBLIC' S PubidLiteral S SystemLiteral 

所以它應該很容易得出這樣的結論,你需要爲了得到它的工作指定,本MCVE作爲證明:

TransformerFactory transformerFactory = TransformerFactory.newInstance(); 
Transformer transformer = transformerFactory.newTransformer(); 
transformer.setOutputProperty(OutputKeys.DOCTYPE_PUBLIC, "TEST1"); 
transformer.setOutputProperty(OutputKeys.DOCTYPE_SYSTEM, "TEST2"); 
transformer.transform(new StreamSource(new StringReader("<Root></Root>")), 
         new StreamResult(System.out)); 

輸出

<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE Root PUBLIC "TEST1" "TEST2"> 
<Root/> 
+0

完美。 .. :) 非常感謝 – Testdeveloper