2011-06-24 23 views
0

我有以下格式的XML:如何連接Xelement中的所有子節點?

<parent> 
      <child id="1"> test1 </child> 
      <child id="2"> test2 </child> 
</parent> 

我怎樣才能得到所有的childNodes的CSV?喜歡,這是我需要它的方式:

<parent> 
      <children>1|test1;2|test2</children> 
</parent> 

其中|和;是分隔符。

任何建議如何使用LINQ來完成?

回答

0
var xml = @"<parent> 
       <child id=""1""> test1 </child> 
       <child id=""2""> test2 </child> 
     </parent>"; 
XElement parentElement = XElement.Parse(xml); 
var childElements = parentElement.Elements("child").ToList(); 
var concatenatedValue = string.Join(";", childElements.Select(c => c.Attribute("id").Value + "|" +c.Value).ToArray()); 
childElements.ForEach(c => c.Remove()); 
parentElement.Add(new XElement("child", concatenatedValue)); 

var newXml = parentElement.ToString(); 
+0

感謝巴拉!它工作。 –

0
File.WriteAllText("C:\\myText.csv", 
    "<parent><children>" + 
    String.Join(";", 
     XDocument.Load("C:\\my.xml").Descendants("child") 
     .Select(e => e.Attribute("id") + "|" + e.Value)) + 
    "</children></parent"); 
0
XDocument inDoc = XDocument.Parse(
    "<parent><child id='1'>test1</child><child id='2'>test2</child></parent>"); 
XDocument outDoc = XDocument.Parse(
    String.Format("<parent><children>{0}</children></parent>", 
     String.Join(";", 
      inDoc.Root.Elements() 
      .Select(e => e.Attribute("id").Value + "|" + e.Value) 
      .ToArray()))); 
+0

爲什麼使用像String.Format這樣昂貴的代碼來進行簡單的連接? –

+0

僅僅因爲它使得例子更清晰,因爲它在表達式的末尾分離了Linq部分。注意我在我加入屬性和元素值的地方使用了簡單的concat。你顯然也可以使用concat作爲外部內容 - 它只是沒有讓事情變得非常明顯(至少對我而言)。 – daveaglick

相關問題