我有以下XML文件。
<Root>
<r1>
<n1>Person1</n1>
<n2>Type1</n2>
</r1>
<r1>
<n1>Person1</n1>
<n2>Type2</n2>
</r1>
<r1>
<n1>Person2</n1>
<n2>Type2</n2>
</r1>
<r1>
<n1>Person2</n1>
<n2>Type3</n2>
</r1>
<r1>
<n1>Person2</n1>
<n2>Type4</n2>
</r1>
<r1>
<n1>Person2</n1>
<n2>Type4</n2>
</r1>
</Root>
我想要的是根据人物获取类型。例如,我尝试下面的查询期望person1的Type1和Type2值,但它不起作用。
XDocument doc = XDocument.Parse(XML_Document);
XElement[] pages = doc
.Descendants("r1")
.OrderBy(x => x.FirstNode.Value=="person1")
.ToArray();
我应该使用哪个查询来获取它?或者是否有更好的方法来处理asp.net C#中的XML文档?
答案 0 :(得分:2)
您可以使用Where()
按r1
子元素值过滤n1
,然后使用Select()
返回相应的n2
元素值:
string[] types = doc.Descendants("r1")
.Where(x => (string)x.Element("n1") == "person1")
.Select(x => (string)x.Element("n2"))
.ToArray();
如果您想明确删除重复值,请在Distinct()
之后添加Select()
。
答案 1 :(得分:2)
尝试使用下面的where语句,它会给你两个xelements
XElement[] pages = doc.Descendants("r1")
.Where(x => x.Element("n1").Value == "Person1")
.ToArray();
答案 2 :(得分:1)
尝试使用以下代码:
var pages = doc.
Descendants("r1").
Where(r1 => r1.Element("n1").Value == "person1").
Select(r1 => r1.Element("n2").Value).
ToArray();