动态创建LINQ查询以查询XML元素



我有一个类似于下面的XML,

<?xml version="1.0" encoding="utf-8"?>
<body>
<Result> 
<Students>
<Student>
<Firstname Value="Max" />
<LastName Value="Dean" />
</Student>
<Student>
<Firstname Value="Driz" />
<LastName Value="Jay" />
</Student>
</Students>
</Result>
</body>

我正试图弄清楚是否可以编写一些代码来动态构建一个Linq查询,比如

string pathToElements = "Result.Students.Student";
var individualItems = pathToElements.Split(".");

类似

XElement document = XElement.Parse(xml);
var evaluatedResult = document.Elements("Result")
.Elements("Students")
.Elements("Student")
.ToList();

基本上CCD_ 1具有3个项目;结果"学生";以及";学生";。我正在探索创建动态查询的可能方法,以实现

document.Elements("Result")
.Elements("Students")
.Elements("Student")
.ToList();

对于n个项目,我只需要继续在查询中添加.Elements("(。关于如何实现这一点的任何建议,我的第一直觉是使用字符串生成器并将查询作为字符串。我能够做到这一点,但无法找到如何执行字符串形式的LINQ查询。提前感谢

您可以使用XPath查询XML(它是一个字符串,因此您可以动态创建它(,然后您可以反序列化项

https://learn.microsoft.com/en-us/troubleshoot/developer/dotnet/framework/general/query-xpathdocument-xpath-csharp

此代码的输出

using System;
using System.Xml.XPath;
using System.IO;
public class Program
{
public static void Main()
{
var xml = @"<?xml version=""1.0"" encoding=""utf-8""?>
<body>
<Result> 
<Students>
<Student>
<Firstname Value=""Max"" />
<LastName Value=""Dean"" />
</Student>
<Student>
<Firstname Value=""Driz"" />
<LastName Value=""Jay"" />
</Student>
</Students>
</Result>
</body>";

using (TextReader tr = new StringReader(xml))
{
var xdoc = new XPathDocument(tr);
var nav = xdoc.CreateNavigator();
var nodeIter = nav.Select("/body/Result/Students/Student");
while (nodeIter.MoveNext()) 
{
Console.WriteLine("Student: {0}", nodeIter.Current.InnerXml);
};           
}       
}
}

Student: <Firstname Value="Max" />
<LastName Value="Dean" />
Student: <Firstname Value="Driz" />
<LastName Value="Jay" />

最新更新