在特定位置的另一个 XElement 中添加 XElement

Posted

技术标签:

【中文标题】在特定位置的另一个 XElement 中添加 XElement【英文标题】:Add XElement in another XElement in specific location 【发布时间】:2020-05-23 11:22:10 【问题描述】:

我的 XML:

<Bank>
    <Customer id="0">
        <Accounts>
            <Account id="0" />
            <Account id="1" />
        </Accounts>
    </Customer>
    <Customer id="2">
        <Accounts>
            <Account id="0" />
        </Accounts>
    </Customer>
</Bank>

我想在客户 id=2 之前添加新的帐户元素。 我在 xelement 中有这个 xml,我想将其他 xelement 添加到第一个。怎么能这样做? 感谢您的帮助。

【问题讨论】:

你为什么要那个?问这个是因为 xml 元素的顺序不应该导致序列化或反序列化的任何问题。 您的意思是要添加一个新的Custom 元素,还是一个新的Account 元素(或两者)? 不,我想在 之前添加 【参考方案1】:

linq-to-xml 让这一切变得简单:

// Parse our XML document to an XDocument
var xml = @"<Bank>
    <Customer id=""0"">
        <Accounts>
            <Account id=""0"" />
            <Account id=""1"" />
        </Accounts>
    </Customer>
    <Customer id=""2"">
        <Accounts>
            <Account id=""0"" />
        </Accounts>
    </Customer>
</Bank>";
var doc = XDocument.Parse(xml);

// Create our new Customer to add
var newCustomer = new XElement("Customer",
    new XAttribute("id", "1"),
    new XElement("Accounts",
        new XElement("Account", new XAttribute("id", "0"))
    )
);

// Find the customer with id="2"
var customer2 = doc.Root.Elements("Customer").First(x => x.Attribute("id").Value == "2");
// Add the new customer before the customer with id="2"
customer2.AddBeforeSelf(newCustomer);

【讨论】:

是否需要使用doc=Xdocument.parse(xml)?因为我使用了 XElement XElement myxElement = new XElement(); MemoryStream myStream = new MemoryStream(); myxElement.Save(myStream);无法更新这个 myxElement 吗? @Ammar.Dev 您可以随意获取XDocument。我将它添加到我的答案中,以便您可以运行它。在您刚刚发布的代码中,您将 XElement 保存到流中,而不是从某处加载 @ canton7 不,我的意思是我加载了 xdocument,我想将其另存为 XElement,但在保存之前,我想向此 XElement 添加其他 XElement。这就是我的帖子的标题。我的意思是如何将新的 XElement 添加到 Exist XElement ? @Ammar.Dev 所以你已经有了创建doc的代码?如果是这样,请跳过我的答案中的前两行,并直接从创建 newCustomer 的位开始 @ canton7 那么 doc.Root 呢?我不知道我的文档,因为我只有 XElement?

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

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

根据特定条件添加Xelement c#

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

XDocument 在一行中写入特定的 XElement

使用 XPathSelectElement 获取 XElement

如何获取 XML 或 XElement 变量中的特定元素计数