xml ドキュメントを使用して、.NET でオンザフライでXmlDocumentを構築しています。次に、それをXslCompiledTransformのTransform()メソッドで変換します。
Transform() メソッドは、エンコーディングに対して無効な文字がストリームで見つかったため、例外をスローしました。Visual Studio の TextVisualizer を使用して文字列をコピーしてAltova XmlSpyに貼り付けると、エンコーディングの問題が見つかりません。
ドキュメントに UTF-16 ヘッダーを追加して UTF-16 としてレンダリングし、結果のテキストから Transform を呼び出して、BOM について不平を言うようにしました。以下は、私が使用したコードの簡略版です。
XmlDocument document = new XmlDocument();
XmlDeclaration decl = document.CreateXmlDeclaration("1.0", "UTF-16", null);
document.AppendChild(decl);
XmlNode root = document.CreateNode(XmlNodeType.Element, "RootNode", "");
XmlNode nodeOne = document.CreateNode(XmlNodeType.Element, "FirstChild", null);
XmlNode nodeTwp = doc.CreateNode(XmlNodeType.Element, "Second Child", null);
root.AppendChild(nodeOne);
root.AppendChild(nodeTwo);
document.AppendChild(root);
その結果、次のように文字列に書き込んでいます。
StringBuilder sbXml = new StringBuilder();
using (XmlWriter wtr = XmlWriter.Create(sbXml))
{
xml.WriteTo(wtr);
// More code that calls sbXml.ToString());
}
BOM を追加したり、BOM を気にしないように XslCompiledTransform.Transform を取得するにはどうすればよいですか?