Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/xml/14.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#_Xml_Linq - Fatal编程技术网

C# linq搜索XML属性

C# linq搜索XML属性,c#,xml,linq,C#,Xml,Linq,我发现了一个与我非常接近的问题。 使用以下xml结构: <EnfocusReport> <Report> <PreflightResult errors="2" criticalfailures="0" noncriticalfailures="0" signoffs="0" fixes="12" warnings="0"> <PreflightResultEntry type="Check" l

我发现了一个与我非常接近的问题。

使用以下xml结构:

<EnfocusReport>
      <Report>
        <PreflightResult errors="2" criticalfailures="0" noncriticalfailures="0" signoffs="0" fixes="12" warnings="0">
              <PreflightResultEntry type="Check" level="error">
            <PreflightResultEntryMessage xml:lang="en-US">
              <Message>Media box width is 792 pt, should be equal to 612 pt, Media box height is 612 pt, should be equal to 792 pt (9x on pages 1-9)</Message>

    ….
    </EnfocusReport>
      </Report>
我会这样做:

var messages = XDocument.Load(args[0])
                        .Descendants("PreflightResultEntryMessage")
                        .Where(x => x.Parent != null && 
                               x.Parent.Name == "PreflightResultEntry" &&
                               x.Parent.Attribute("level") != null &&
                               x.Parent.Attribute("level").Value == "error")
                        .Select(x => x.Element("Message").Value);

在我使用的XML文件中,我应该有2个元素包含错误消息。但是我的结果一点都不重要。很好,把我的答案标记为被接受,这样其他人可能会认为这就是你问题的解决方案。就一个问题?如果我还想在同一个查询中返回来自x.Parent.Attribute(“type”)的属性以及消息,这可能吗?可以使用匿名类型:
。选择(x=>new{message=x.Element(“message”).Value,type=x.Parent.Attribute(“type”).Value})
  <Message>Media box width is 792 pt, should be equal to 612 pt, Media box height is 612 pt, should be equal to 792 pt (9x on pages 1-9)</Message>
   var result2 = from EnfocusReport in XDocument.Load(args[0]).Root.Elements("EnfocusReport")
                          from Report in EnfocusReport.Elements("Report")
                          from PreflightResultEntry in Report.Elements("PreflightResultEntry")
                          from PreflightResultEntryMessage in PreflightResultEntry.Elements("PreflightResultEntryMessage")
                          where PreflightResultEntry.Attributes("level").Equals("error")
                          select PreflightResultEntryMessage.Elements("Message");



        foreach (var el in result2)
        {
            Console.WriteLine(el);
            Console.ReadLine();

        }
var messages = XDocument.Load(args[0])
                        .Descendants("PreflightResultEntryMessage")
                        .Where(x => x.Parent != null && 
                               x.Parent.Name == "PreflightResultEntry" &&
                               x.Parent.Attribute("level") != null &&
                               x.Parent.Attribute("level").Value == "error")
                        .Select(x => x.Element("Message").Value);