C# XDocument how to use linq to filter elements(C#XDocument如何使用Linq过滤元素)
                            本文介绍了C#XDocument如何使用Linq过滤元素的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
                        
                        问题描述
我正在使用
从Memory Stream读取XMLXDocument doc = XDocument.Load(targetStream);
foreach (XElement element in doc.Root.Elements())
{
     Console.WriteLine(element);
}
我的一个元素如下所示。我不确定为什么要将名称空间xmlns添加到每个元素。基本上,我想筛选SerialNo=01的所有‘Header’元素
<Header xmlns="LR/2020-21">
  <CollectionDetails>
    <Collection>ILR</Collection>
    <Year>2021</Year>
    <FilePreparationDate>2020-05-08</FilePreparationDate>
  </CollectionDetails>
  <Source>
    <ProtectiveMarking>OFFICIAL-SENSITIVE-Personal</ProtectiveMarking>
    <UKPRN>99999999</UKPRN>
    <SoftwareSupplier>SupplierName</SoftwareSupplier>
    <SoftwarePackage>SystemName</SoftwarePackage>
    <Release>1</Release>
    <SerialNo>01</SerialNo>
    <DateTime>2020-05-08T09:14:05</DateTime>
    <!-- This and the next element only appear in files generated by FIS -->
    <ReferenceData>Version5.0, LARS 2018-08-01</ReferenceData>
    <ComponentSetVersion>1</ComponentSetVersion>
  </Source>
</Header>
甚至下面的代码也带来了空记录
        IEnumerable<XElement> list1 =
                            from el in doc.Descendants("Header")
                            where (string)el.Attribute("xmlns") == "LR/2020-21"
                            select el;
有人能帮我这个忙吗?
谢谢
推荐答案
因此,如果要筛选命名空间,则需要为元素名称提供正确的命名空间。如下所示:
var ns = XNamespace.Get("LR/2020-21");
var headers = doc.Root
    .Elements(ns + "Header")
    .Where(e => (string)e.Element(ns + "Source").Element(ns + "SerialNo") == "01");
如果同一Header元素中存在多个SerialNo,则可以使用以下表达式。
var ns = XNamespace.Get("LR/2020-21")
var matchingHeaders = doc.Root
    .Elements(ns + "Header")
    .Where(header => header
        .Elements(ns + "Source")
        .Any(source => source
            .Elements(ns + "SerialNo")
            .Any(serialNo => (string)serialNo == "01")))
                        这篇关于C#XDocument如何使用Linq过滤元素的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持编程学习网!
				 沃梦达教程
				
			本文标题为:C#XDocument如何使用Linq过滤元素
				
        
 
            
        
             猜你喜欢
        
	     - 如何用自己压缩一个 IEnumerable 2022-01-01
 - WebMatrix WebSecurity PasswordSalt 2022-01-01
 - MoreLinq maxBy vs LINQ max + where 2022-01-01
 - 在哪里可以找到使用中的C#/XML文档注释的好例子? 2022-01-01
 - C# 中多线程网络服务器的模式 2022-01-01
 - 带有服务/守护程序应用程序的 Microsoft Graph CSharp SDK 和 OneDrive for Business - 配额方面返回 null 2022-01-01
 - 输入按键事件处理程序 2022-01-01
 - C#MongoDB使用Builders查找派生对象 2022-09-04
 - Web Api 中的 Swagger .netcore 3.1,使用 swagger UI 设置日期时间格式 2022-01-01
 - 良好实践:如何重用 .csproj 和 .sln 文件来为 CI 创建 2022-01-01
 
						
						
						
						
						
				
				
				
				