将XElement添加到特定位置的另一个XElement

时间:2014-07-08 03:50:54

标签: c# xml c#-4.0 linq-to-xml xelement

请考虑这个XML

<Employees>
    <Person>
        <ID>1000</ID>
        <Name>Nima</Name>
        <LName>Agha</LName>
    </Person>
    <Person>
        <ID>1002</ID>
        <Name>Ligha</Name>
        <LName>Ligha</LName>
    </Person>
    <Person>
        <ID>1003</ID>
        <Name>Jigha</Name>
        <LName>Jigha</LName>
    </Person>
</Employees>

这是XElement变量的内容。现在我有另一个XElement变量包含此内容:

<Person>
    <ID>1001</ID>
    <Name>Aba</Name>
    <LName>Aba</LName>
</Person>

我想将此XEelemnt变量添加到特定位置的第一个XElement(例如,作为第二个Person标记)。我怎么能这样做?

感谢

1 个答案:

答案 0 :(得分:4)

首先需要加载xml字符串,然后获取要插入xml的位置,然后插入新的xml。这是一个如何做的例子。

var reader = new StringReader(@"<Employees>
    <Person>
        <ID>1000</ID>
        <Name>Nima</Name>
        <LName>Agha</LName>
    </Person>
    <Person>
        <ID>1002</ID>
        <Name>Ligha</Name>
        <LName>Ligha</LName>
    </Person>
    <Person>
        <ID>1003</ID>
        <Name>Jigha</Name>
        <LName>Jigha</LName>
    </Person>
</Employees>");
var xdoc = XDocument.Load(reader);
xdoc.Element("Employees").
   Elements("Person").
   First().
   AddAfterSelf(new XElement("Person", 
       new XElement("ID", 1001),
       new XElement("Name", "Aba"),
       new XElement("LName", "Aba")));

var sb = new StringBuilder();
var writer = new StringWriter(sb);
xdoc.Save(writer);
Console.WriteLine(sb);

更新

如果要按索引插入,只需先获取元素即可。例如,您想要插入第二个位置,那么您需要获取第一个索引(index = 0)。

var xdoc = XDocument.Load(reader);
xdoc.Element("Employees").
    Elements("Person").
    ElementAt(0).
    AddAfterSelf(new XElement("Person", 
        new XElement("ID", 1001),
        new XElement("Name", "Aba"),
        new XElement("LName", "Aba")));

PS:为简单起见,我没有添加无效检查。