(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/>
なぜそれは機能しますか?仕様によると、 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