我正在使用XDocument处理XML数据。 我的Xml具有以下结构
<Info>
<ProductDetails>
<ProductDetail>
<ProductId>123</ProductId>
<ProductName>Test</ProductName>
<ProductType>1</ProductType>
<AccountDetails>
<AccountType>Single</AccountType>
<AccountDetail>
<AccountId>8564</AccountId>
</AccountDetail>
</AccountDetails>
</ProductDetail>
</ProductDetails>
</Info>
我想基于特定元素Id检索XML中的AccountDetails部分,然后将其替换为其他一些XML内容。 我试过像
这样的东西xdoc.Root.Element("ProductDetails").Element("ProductDetail").Element("ProductId").Value
实现这一目标的最佳方法是什么
答案 0 :(得分:3)
听起来您想要找到具有给定产品ID的第一个ProductDetail
元素。这可以解决这个问题:
public XElement FindProduct(XDocument doc, int id)
{
return doc.Descendants("ProductId")
.Where(pid => (int) pid == id)
.Select(pid => pid.Parent)
.FirstOrDefault();
}
如果找不到相关产品,则会返回null
。请注意,它不检测是否存在具有相同ID的多个产品。
答案 1 :(得分:1)
这是第一个答案的扩展版本:
public void UpdateAccountDetails(XDocument doc, int id,XElement newContent)
{
var element = doc.Descendants("ProductDetail")
.Where(p => (int)p.Element("ProductId").Value == id)
.Select(p => p)
.FirstOrDefault();
if (element != null) {
element.Element("AccountDetails").ReplaceWith(newContent);
doc.Save(path);
}
}