在特定位置的另一个 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
元素(或两者)?
不,我想在 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的主要内容,如果未能解决你的问题,请参考以下文章