繁体   English   中英

使用Linq查询从XML获取价值

[英]Getting Values From XML With Linq Query

我有下面的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文档?

您可以使用Where()n1个子元素值过滤r1 ,然后使用Select()返回相应的n2元素值:

string[] types = doc.Descendants("r1")
                     .Where(x => (string)x.Element("n1") == "person1")
                     .Select(x => (string)x.Element("n2"))
                     .ToArray();

如果要显式删除重复的值,请在Select() Distinct()之后添加Distinct()

尝试使用如下所示的where语句,这将给您两个要素

        XElement[] pages = doc.Descendants("r1")
                              .Where(x => x.Element("n1").Value == "Person1")
                              .ToArray();

尝试使用以下代码:

var pages = doc.
            Descendants("r1").
            Where(r1 => r1.Element("n1").Value == "person1").
            Select(r1 => r1.Element("n2").Value).
            ToArray();

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM