2017-07-04 21 views
1

XMLファイルを生成するコードを記述しました。私はそれが公開されるべきであるXMLのdoctypeを定義することに固執しています。私はSYSTEMのdoctypeを正常に取得できますが、何とかXMLで書かれた公開のdoctypeを取得できませんでした。システムDOCTYPEのコードが機能していますが、PUBLIC 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....!!"); 

スニペットを動作していません。 ITSは、エラーを与えていないが、何の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

関連する問題