このコード (C#、.NET 3.5 SP1) の場合:
var doc = new XmlDocument();
doc.LoadXml("<?xml version=\"1.0\"?><root>"
+ "<value xml:space=\"preserve\">"
+ "<item>content</item>"
+ "<item>content</item>"
+ "</value></root>");
var text = new StringWriter();
var settings = new XmlWriterSettings() { Indent = true, CloseOutput = true };
using (var writer = XmlWriter.Create(text, settings))
{
doc.DocumentElement.WriteTo(writer);
}
var xml = text.GetStringBuilder().ToString();
Assert.AreEqual("<?xml version=\"1.0\" encoding=\"utf-16\"?>\r\n<root>\r\n"
+ " <value xml:space=\"preserve\"><item>content</item>"
+ "<item>content</item></value>\r\n</root>", xml);
が要素のXmlWriter
周りに改行とインデントを挿入しているため、属性と矛盾しているように見えるため、アサーションは失敗します。<item>
xml:space="preserve"
空白なしで(または重要な空白のみで、すでににロードされている)入力を取り、空白を保持するようにマークされた要素内に空白を追加せずXmlDocument
に(明らかな理由で)きれいに印刷しようとしています。
これはバグですか、それとも何か間違っていますか? 私がやろうとしていることを達成するためのより良い方法はありますか?
編集:おそらく、出力側XmlWriter
で withを使用する必要があることを追加する必要があります。Indent=true
「実際の」コードでは、これは私のコードの外から渡されています。