如何连接Xelement中的所有子节点?

时间:2011-06-24 18:43:57

标签: xml linq

我有以下格式的xml:

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

如何获取所有子节点的csv?就像,这就是我需要的方式:

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

其中|和;是分隔符。

有关如何使用LINQ完成任何建议吗?

3 个答案:

答案 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");

答案 1 :(得分: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();

答案 2 :(得分: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())));