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

Posted

技术标签:

【中文标题】将 XElement 添加到特定位置的另一个 XElement【英文标题】:Add XElement to another XElement in specific location 【发布时间】:2014-08-28 16:35:02 【问题描述】:

请考虑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 标记)。我怎么能做到这一点?

谢谢

【问题讨论】:

您是否将 xelement 作为对象? 对不起,我不明白你的意思... 你加载xml字符串了吗? 是的,我把它加载到XElement 【参考方案1】:

首先你需要加载 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:为简单起见,我没有添加无效检查。

【讨论】:

谢谢,但我不想像你的代码一样添加第二个 xml。我想在不知道 ID=1001Name=Aba 的情况下添加它,...。我想添加我的第二个变量。例如,我说的是第二个位置。我想在XElementnth 位置添加该变量 ID=1001 是新元素,获取第一个元素我使用First() 然后AddAfterSelf,这意味着它将作为第二个元素插入。 请参阅第一条评论。我想添加nth的地方 您的意思是使用索引作为参数插入新元素?

以上是关于将 XElement 添加到特定位置的另一个 XElement的主要内容,如果未能解决你的问题,请参考以下文章

如何在 XML 文档中的特定位置添加 XElement

根据特定条件添加Xelement c#

C++ Builder XE:找出包含特定 h 文件的位置

XElement 会自动将 xmlns="" 添加到自身

如何将子元素作为解码字符串添加到 XElement?

使用格式化和缩进将 XElement 添加到 XML 文件