简体   繁体   English

使用Linq在C#中的XML元素/节点内添加XElement

[英]Adding XElement inside a XML Element/Node in c# using Linq

i want to create some xml with this format 我想用这种格式创建一些xml

<root>
 <columns>
  <column name="name1" value="value1" />
  <column name="name2" value="value2" />
  <column name="name3" value="value3" />
  ...
 </columns>
 <rows>
  <row name="name1" value="value1" />
  <row name="name2" value="value2" />
  <row name="name3" value="value3" />
  ...
 </rows>
</root>

so i create a 所以我创建一个

XElement tree = new XElement("root", new XElement("columns", from c in  columns select new XElement("column", c) ...

And the result is 结果是

<root>
 <columns>
  <column>
   <column>
    <column> 
     ...
    </column>
   </column>
  </columns>
 ...
</root>

how can i close a node children or something to have what i want?? 我怎样才能关闭节点的孩子或有我想要的东西?

Following code: 以下代码:

List<KeyValuePair<string, string>> columns = new Dictionary<string,string> {
   {"name1", "value1"},
   {"name2", "value2"},
   {"name3", "value3"}
}.ToList();

XElement tree =
    new XElement("root",
        new XElement("columns",
            from c in columns
            select new XElement("column",
                new XAttribute("name", c.Key),
                new XAttribute("value", c.Value)
            )
        ),
        new XElement("rows",
             from r in rows // same dictionary as columns 
             select new XElement("row",
                 new XAttribute("name", r.Key),
                 new XAttribute("value", r.Value)
            )
        )
    );

Produces required xml: 产生所需的xml:

<root>
  <columns>
    <column name="name1" value="value1" />
    <column name="name2" value="value2" />
    <column name="name3" value="value3" />
  </columns>
  <rows>
    <row name="name1" value="value1" />
    <row name="name2" value="value2" />
    <row name="name3" value="value3" />
  </rows>
</root>
XElement tree = new XElement("root",
    new XElement("columns",
        from c in columns
        select new XElement("column", new XAttribute("name", c.Name,), new XAttribute("value", c.Value))),
    new XElement("rows",
        from r in rows
        select new XElement("row", new XAttribute("name", r.Name,), new XAttribute("value", r.Value))));

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM