XElementオブジェクトのコンテンツをどのように書式設定できますか?フォーマットXElementオブジェクト
私は、出力文字列が.ToString()を呼び出すときに自動的にフォーマットされることを知っていますが、オブジェクトを文字列に変換する前に空白文字ノードを追加します。
目的は、Microsoft.VisualStudio.XmlEditorクラスによって生成されたモデル内のXMLノードを書式設定することです。
XElementオブジェクトのコンテンツをどのように書式設定できますか?フォーマットXElementオブジェクト
私は、出力文字列が.ToString()を呼び出すときに自動的にフォーマットされることを知っていますが、オブジェクトを文字列に変換する前に空白文字ノードを追加します。
目的は、Microsoft.VisualStudio.XmlEditorクラスによって生成されたモデル内のXMLノードを書式設定することです。
は(XTEXTとして格納されている)子要素としてテキストを追加します:ユニバーサル整形(任意のXML)の
string xml = "<a><b>b</b></a>";
XElement xdoc = XElement.Parse(xml);
var b = xdoc.Element("b");
b.AddBeforeSelf(" ");
b.AddAfterSelf(new XText(" "));
b.Add(" ");
b.AddFirst(" ");
Console.WriteLine(xdoc.ToString(SaveOptions.DisableFormatting));
例:
string xml = "<a><b a=\"a\"><c><d>d</d></c></b><b a=\"a\"><c><d>d</d></c></b><e b=\"b\" a=\"a\"><f>f</f></e></a>";
XElement xdoc = XElement.Parse(xml);
Format(xdoc, 0);
Console.WriteLine(xdoc.ToString(SaveOptions.DisableFormatting));
static void Format(XElement x, int level)
{
foreach (var x1 in x.Elements())
Format(x1, level + 1);
if (level > 0)
{
x.AddBeforeSelf(Environment.NewLine + new string(' ', 2 * level));
if (x.Parent.LastNode == x)
{
string ending = Environment.NewLine;
if (level > 1)
ending += new string(' ', 2 * (level - 1));
x.AddAfterSelf(ending);
}
}
}
文字列の出力ではなく、XElementオブジェクト自体に空白を追加したいとします。 – TWT
xelementは空白を格納しません。それは文字列ではありません。タグの内容(inside <> ...>)、属性の内容は格納されますが、<>の前後の内容は格納されません。してください、否定的な評判を与えてはいけません。ありがとう) –
xelementとlookの宣言でF12を押してください。 Name、Valueプロパティ、Attributes()メソッドを持ちます。 Whitespaceプロパティはありません。 –
をあなたが私たちあなたのコードを示しすることはできますか? – J3soon
*空白ノード*とは何ですか? –
空白をコンテンツとして持つXTextオブジェクト。 – TWT