我有一个类似于下面的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" />