これはとても単純な質問でなければなりませんが、私は答えを得ることができません。
XmlNodeがあり、読みやすくするためにインデント(タブまたはスペース)をそのままにして、このノードを文字列として出力するだけです。
これまで、XmlWriter、XmlTextWriter、XmlDocument、XmlReaderを試しました。
インデントなしでXmlNodeを文字列として出力するのは簡単です。 XmlNode.OuterXmlを実行します。そこにインデントを取得するにはどうすればよいですか?
XmlNodeをループせず、ブルートフォースを使用して空白を追加せずにこれを実行したいのは、もっと簡単な方法があるはずだからです。
ありがとう。
編集:将来の読者のために、ここに答えがあります:
var xmlNode = is some object of type XmlNode
using (var sw = new StringWriter())
{
using (var xw = new XmlTextWriter(sw))
{
xw.Formatting = Formatting.Indented;
xw.Indentation = 2; //default is 1. I used 2 to make the indents larger.
xmlNode.WriteTo(xw);
}
return sw.ToString(); //The node, as a string, with indents!
}
これを行う必要がある理由は、構文が強調表示されたノードのxmlを出力するためでした。 AvalonEditを使用してxmlを強調表示し、強調表示されたテキストをhtmlに出力してから、htmlをRichTextBoxに表示できるFlowDocumentに変換しました。
あなたはXMLTextWriter
で正しい道を進んでいました、あなたは単にベースストリームとしてStringWriter
を使う必要があります。これが いくつかの良い答え これがどのように達成されるかについてです。エンコーディングをUTF-8にする必要がある場合は、2番目の回答に特に注意してください。
編集:
複数の場所でこれを行う必要がある場合は、XmlNode
でToString()
をオーバーロードする拡張メソッドを作成するのは簡単です。
public static class MyExtensions
{
public static string ToString(this System.Xml.XmlNode node, int indentation)
{
using (var sw = new System.IO.StringWriter())
{
using (var xw = new System.Xml.XmlTextWriter(sw))
{
xw.Formatting = System.Xml.Formatting.Indented;
xw.Indentation = indentation;
node.WriteContentTo(xw);
}
return sw.ToString();
}
}
}
メモリやパフォーマンスを気にしない場合、最も簡単なことは次のとおりです。
XElement.Parse(xmlNode.OuterXml).ToString()