2009-12-23 21 views
0

如何使用Linq to Xml強制某些節點之間的額外間距?我期望輸出以下內容:將輸出與Linq間隔到Xml

<root> 

    <group> 
     <leaf /> 
    </group> 

    <group> 
     <leaf /> 
    </group> 

</root> 

通過添加空XText,它只會破壞格式。

var root = 
    new XElement("root", 
     new XText(""), 
     new XElement("group", 
      new XElement("leaf")), 
     new XText(""), 
     new XElement("group", 
      new XElement("leaf")), 
     new XText("")); 

Console.WriteLine(root.ToString()); 

導致

<root><group><child /></group><group><child /></group></root> 

回答

1

這是一個解決方案,但it's不漂亮...

變化XTEXT到XComment,做這樣的事情...


    var root = 
     new XElement("root", 
      new XComment(""), 
      new XElement("group", 
       new XElement("leaf")), 
      new XComment(""), 
      new XElement("group", 
       new XElement("leaf")), 
      new XComment("")); 

    Console.WriteLine(XElementToText(root)); 


    private string XElementToText(XElement element) 
    { 
     var sb = new StringBuilder(); 
     using (var writer = XmlWriter.Create(sb, 
      new XmlWriterSettings {Indent = true})) 
     { 
      element.WriteTo(writer); 
     } 
     return sb.ToString().Replace("<!---->", string.Empty); 
    } 

編輯:福格特逃跑比...

+0

哈哈尼克破解!沒想到這個! 不是最好的解決方案,但明確地做這項工作 – 2009-12-23 01:51:02

0

傳遞一個XmlTextWriter(與Formatting設置爲Formatting.Indented)至root.WriteTo()

例如:

using(var writer = new XmlTextWriter(Console.Out)); 
{ 
    writer.Formatting = Formatting.Indented; 
    root.WriteTo(writer); 
} 
+0

不推薦使用'XmlTextWriter'。 – 2009-12-23 00:41:39

+0

它當然不是 – Randolpho 2009-12-23 00:42:59

+0

官方文檔(http://msdn.microsoft.com/en-us/library/system.xml.xmltextwriter.aspx)不同意:「在.NET Framework 2.0版本中,推薦的做法是使用XmlWriter.Create方法和XmlWriterSettings類創建XmlWriter實例,從而充分利用此版本中引入的所有新功能,有關更多信息,請參閱創建XML作者。 – 2009-12-23 00:43:59

1
using (var writer = XmlWriter.Create(
    Console.Out, 
    new XmlWriterSettings { Indent = true }) 
{ 
    root.WriteTo(writer); 
} 
+0

不適合我。額外的空白不顯示 – 2009-12-23 01:54:14

+0

看來,我(而不是我一個人)誤解了你的問題 - 你不只是想縮進,你還希望元素之間的空白行。如果你需要的話,你需要插入你自己的'XText'節點 - 不是空的,而是用正確數量的'\ n'和空格或製表符來獲得你需要的精確縮進。 – 2009-12-23 04:28:25

+0

對不起,如果我的問題是誤導。 XText的問題在於,如果將它與XElements混合使用,則會破壞格式。不得不明確地添加所有標籤我自己有點醜陋。 (即新的XText(「\ n \ t \ t」)) – 2009-12-23 06:47:24