2009-11-05 68 views
18

(DOMを使用してXML文書をシリアライズするときに)Transformerに通知する方法はありますか?スタンドアロン属性を省略するには?Java DOM + Transformerを使用しているときにxml宣言でstandalone属性を省略しています。

好ましくはハックを使用せずに、つまり、XML宣言全体を省略し、手動で前置することです。

私の現在のコード:現在の

Transformer transformer = TransformerFactory.newInstance().newTransformer(); 
transformer.setOutputProperty(OutputKeys.INDENT, "yes"); 
transformer.setOutputProperty(OutputKeys.STANDALONE, "yes"); //Note nothing is changed 

StreamResult result = new StreamResult(new StringWriter()); 
DOMSource source = new DOMSource(document); 
transformer.transform(source, result); 
return result.getWriter().toString(); 

:対象

<?xml version="1.0" encoding="UTF-8" standalone="no"?> 
<someElement/> 

<?xml version="1.0" encoding="UTF-8"> 
<someElement/> 

答えて

41

はそれを考え出した...代わりに変圧器への変更の

ドキュメントオブジェクトに以下を追加します。

document.setXmlStandalone(true); 
+3

なぜそれは機能しますか?仕様によると、 https://www.w3.org/TR/2004/REC-xml-20040204/#sec-rmd "外部のマークアップ宣言があるが、スタンドアロンのドキュメント宣言がない場合、値" no "と仮定される。 この回答は:https://stackoverflow.com/questions/5578645/what-does-the-standalone-directive-mean-in-xmlには、スタンドアロンの属性がない場合は「いいえ」とみなされることが記載されています。それではどうやってdocument.setXmlStandalone(true);属性を削除しますか? – mdzh

0

どのJavaバージョンを使用していますか、どのXSLT変換ツールを使用していますか? Sun Java 1.6.0_16では、スタンドアロンの属性は出力プロパティを設定し、内容も正しい場合にのみ出力ドキュメントに設定されます。

+0

Eclipse 4.5(Mars)の組み込みJava 8 SEを使用して同じ問題が発生します。 – GreenhouseVeg

2

document.setXmlStandalone(true/false);は正常です。

関連する問題