C# linq搜索XML属性
我发现了一个与我非常接近的问题。 使用以下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
<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);