[英]Returning Descendants of a xml node as a List<string> using LINQ or XPATH
我有一個像這樣的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>
現在我創建了一個類來保存每個Test節點的數據:
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類,但是我有問題將成員添加到我擁有的List中。 我正在嘗試使用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("Members").Elements("Member")
嘗試這個:
IEnumerable<string> members =
from m in ((IEnumerable<XmlNode>)((IHasXmlNode)val).GetNode()
.SelectNodes("Members/Member"))
select m.Value;
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.