web-dev-qa-db-ja.com

XMLドキュメントのスタンドアロン属性宣言を削除する方法は?

私は現在Javaを使用してxmlを作成していて、それを文字列に変換しています。xml宣言は次のとおりです。

DocumentBuilderFactory dbfac = DocumentBuilderFactory.newInstance();
DocumentBuilder docBuilder = dbfac.newDocumentBuilder();
Document doc = docBuilder.newDocument();
doc.setXmlVersion("1.0");

ドキュメントを文字列に変換するために、次の宣言を含めます。

TransformerFactory transfac = TransformerFactory.newInstance();
Transformer trans = transfac.newTransformer();
trans.setOutputProperty(OutputKeys.OMIT_XML_DECLARATION, "no");
trans.setOutputProperty(OutputKeys.VERSION, "1.0");
trans.setOutputProperty(OutputKeys.ENCODING,"UTF-8");
trans.setOutputProperty(OutputKeys.INDENT, "yes");

そして、私は変換を行います:

StringWriter sw = new StringWriter();
StreamResult result = new StreamResult(sw);
DOMSource source = new DOMSource(doc);
trans.transform(source, result);
String xmlString = sw.toString();

問題は、XML宣言属性にスタンドアロン属性が含まれていることです。これは必要ありませんが、バージョン属性とエンコーディング属性を表示したいのです。

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

それを指定できるプロパティはありますか?

34
user1084509

私が読んだことから、Documentを作成する前にDOMSourceで以下のメソッドを呼び出すことでこれを行うことができます。

_doc.setXmlStandalone(true); //before creating the DOMSource
_

falseに設定すると、表示するかどうかを制御できません。つまり、DocumentsetXmlStandalone(true)です。トランスフォーマーで出力が必要な場合は、必要な「はい」または「いいえ」を指定してOutputKeysを使用します。 DocumentsetXmlStandalone(false)を使用すると、Transformerで何を設定したかに関係なく(設定した場合)、出力は常に_standalone="no"_になります。

このフォーラムの スレッドを読む

48