如何解决在 C# 中过滤 XmlDocument xml 的最快方法
我有一个包含以下 xml 的 XmlDocument 对象:
<xml>
<People>
<Person>
<FirstName>John</FirstName>
<Surname>Smith</Surname>
<Type>A</Type>
</Person>
<Person>
<FirstName>Bill</FirstName>
<Surname>Smith</Surname>
<Type>B</Type>
</Person>
<Person>
<FirstName>Chad</FirstName>
<Surname>Smith</Surname>
<Type>B</Type>
</Person>
<Person>
<FirstName>Tina</FirstName>
<Surname>Johnson</Surname>
<Type>B</Type>
</Person>
</People>
</xml>
我想将 Surname 节点设置为 Smith 并且类型设置为 B 的 xml 过滤到另一个 XMLDocument 对象中,如下所示:>
<xml>
<People>
<Person>
<FirstName>Bill</FirstName>
<Surname>Smith</Surname>
<Type>B</Type>
</Person>
<Person>
<FirstName>Chad</FirstName>
<Surname>Smith</Surname>
<Type>B</Type>
</Person>
</People>
</xml>
在 C# 中使用上述标准过滤我的 xml 的最简单/最快速的方法是什么?有没有办法在 Linq 中做到这一点?我尝试使用 SelectNodes 和 XPath,但不确定如何正确编写 XPath 表达式。
谢谢!
编辑:想通了:
descendant::Person[Surname='Smith' and Type='B']
解决方法
尝试以下操作:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Xml;
using System.Xml.Linq;
namespace ConsoleApplication193
{
class Program
{
const string FILENAME = @"c:\temp\test.xml";
static void Main(string[] args)
{
XDocument doc = XDocument.Load(FILENAME);
XElement people = doc.Descendants("People").FirstOrDefault();
List<XElement> smith = people.Elements("Person").Where(x => (string)x.Element("Surname") == "Smith").ToList();
people.ReplaceAll(smith);
}
}
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。