我有一个这样的xml文件
<Document>
<Tests>
<Test>
<Name>A</Name>
<Type>Like A</Type>
<Members>
<Member>1</Member>
<Member>2</Member>
<Member>3</Member>
</Members>
</Test>
<Test>
<Name>B</Name>
<Type>Like B</Type>
<Members>
<Member>4</Member>
<Member>5</Member>
<Member>6</Member>
</Members>
</Test>
</Tests>
</Document>
现在我创建了一个类来保存每个测试节点的数据:
public class TestData
{
public string Name {get;set;}
public string Type {get;set;}
public List<string> Members = new List<string>();
public AddMembers(List<string> members)
{
Members.AddRange(members);
}
}
现在我正在尝试使用 xpath 来填充我的 TestData 类,但是我在将成员添加到我的列表时遇到了问题。我正在尝试使用 LINQ,但我还做不到 :(
public List<TestClass> GetTests()
{
List<TestClass> tests = new List<TestClass>();
TestClass test;
XPathNodeIterator it = nav.Select("/Document/Tests/Test");
foreach (XPathNavigator val in it)
{
test= new TestClass();
test.Name = val.SelectSingleNode(nav.Compile("Name")).Value;
test.Type = val.SelectSingleNode(nav.Compile("Type")).Value;
test.AddMembers(); //How can I return all the member nodes in a list?
tests.Add(test);
}
return tests ;
}
最佳答案
老实说,您一开始并不清楚为什么要使用 XPathNodeIterator。如果您可以为此使用 LINQ to XML,那真的很简单:
var list = doc.Descendants("Test")
.Select(x => TestClass.FromXElement(x))
.ToList();
TestClass.FromXElement
是这样的:
public static TestClass FromXElement(XElement element)
{
string name = (string) element.Element("Name");
string type = (string) element.Element("Type");
List<string> members = element.Descendants("Member")
.Select(x => x.Value)
.ToList();
return new TestClass(name, type, members);
}
(如果您想更严格地控制层次结构,则不必使用 Descendants
。例如,在 TestClass.FromXElement
中,您可以使用 element.Element("成员").Elements("成员")
关于c# - 使用 LINQ 或 XPATH 将 xml 节点的后代作为 List<string> 返回,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8383062/