Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/linq/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# LINQ到XML简单查询_C#_Linq To Xml - Fatal编程技术网

C# LINQ到XML简单查询

C# LINQ到XML简单查询,c#,linq-to-xml,C#,Linq To Xml,我有这样一个XML文档: <Persons> <Person Id="10000" FullName="Jon Doe"> <Status StatusID="1" StatusDesc="Active"/> <Fields> <Field FieldId="1" Value="xxxx"/> <Field FieldId="2" Value="yyyy"/>

我有这样一个XML文档:

<Persons>
 <Person Id="10000" FullName="Jon Doe">
  <Status StatusID="1" StatusDesc="Active"/>
      <Fields>
          <Field FieldId="1" Value="xxxx"/>
          <Field FieldId="2" Value="yyyy"/>
          <Field FieldId="2" Value="zzzz"/>
      </Fields>
 </Person>
 <Person Id="10001" FullName="John Smith">
  <Status StatusID="2" StatusDesc="New"/>
  <Fields>
      <Field FieldId="3" Value="aaaa"/>
      <Field FieldId="4" Value="bbbb"/>
     <Field FieldId="5" Value="ccccv"/>
  </Fields>
 </Person>
</Persons>
var result = XElement.Load("Example.xml")
  .Elements("Person")
  .Select(p => new {
   Id = p.Attribute("Id").Value,
   Fields = p.Descendants("Field").Select(f => new {
      Id = f.Attribute("FieldId").Value,
      Value = f.Attribute("Value").Value
     })
  });
class Anonymous
{
    public String Id { get; }
    public IEnumerable<AnonymousSubtype> Fields { get; }
}

class AnonymousSubtype
{
   public String Id { get; }
   public String Value { get; }
}

我想编写一个XML查询,返回“Person”ID和所有“Fields”元素。 我可以获取所有“字段”元素,但不能获取“个人”ID。 当我需要“Status”元素时,同样适用


任何帮助都将不胜感激。

尝试以下方法:

<Persons>
 <Person Id="10000" FullName="Jon Doe">
  <Status StatusID="1" StatusDesc="Active"/>
      <Fields>
          <Field FieldId="1" Value="xxxx"/>
          <Field FieldId="2" Value="yyyy"/>
          <Field FieldId="2" Value="zzzz"/>
      </Fields>
 </Person>
 <Person Id="10001" FullName="John Smith">
  <Status StatusID="2" StatusDesc="New"/>
  <Fields>
      <Field FieldId="3" Value="aaaa"/>
      <Field FieldId="4" Value="bbbb"/>
     <Field FieldId="5" Value="ccccv"/>
  </Fields>
 </Person>
</Persons>
var result = XElement.Load("Example.xml")
  .Elements("Person")
  .Select(p => new {
   Id = p.Attribute("Id").Value,
   Fields = p.Descendants("Field").Select(f => new {
      Id = f.Attribute("FieldId").Value,
      Value = f.Attribute("Value").Value
     })
  });
class Anonymous
{
    public String Id { get; }
    public IEnumerable<AnonymousSubtype> Fields { get; }
}

class AnonymousSubtype
{
   public String Id { get; }
   public String Value { get; }
}
这将为您提供一系列匿名类型,如下所示:

<Persons>
 <Person Id="10000" FullName="Jon Doe">
  <Status StatusID="1" StatusDesc="Active"/>
      <Fields>
          <Field FieldId="1" Value="xxxx"/>
          <Field FieldId="2" Value="yyyy"/>
          <Field FieldId="2" Value="zzzz"/>
      </Fields>
 </Person>
 <Person Id="10001" FullName="John Smith">
  <Status StatusID="2" StatusDesc="New"/>
  <Fields>
      <Field FieldId="3" Value="aaaa"/>
      <Field FieldId="4" Value="bbbb"/>
     <Field FieldId="5" Value="ccccv"/>
  </Fields>
 </Person>
</Persons>
var result = XElement.Load("Example.xml")
  .Elements("Person")
  .Select(p => new {
   Id = p.Attribute("Id").Value,
   Fields = p.Descendants("Field").Select(f => new {
      Id = f.Attribute("FieldId").Value,
      Value = f.Attribute("Value").Value
     })
  });
class Anonymous
{
    public String Id { get; }
    public IEnumerable<AnonymousSubtype> Fields { get; }
}

class AnonymousSubtype
{
   public String Id { get; }
   public String Value { get; }
}

到目前为止你有什么代码?这正是我要找的。我试试看。。谢谢Andrew。@anon2010-我简化了一点查询-这是同一个查询,只是有一个简化的方法。Ty Andrew,“let fields”语句让我有点困惑。为什么使用p.subjects(“Field”)而不是p.Elements(“Field”)?另外,我如何预测结果???@anon2010-我更新了我的答案,而不是评论。要对很多东西发表评论!:)