LINQtoXML递归查询我有一个像文档树一样的xml站点地图,它看起来像这样:实际的xml文件太大,无法显示。基本上你需要消除的是可能有“X”个文件夹相互嵌套,并且在这些文件夹中的某个点,可能有“X”个带有子文件夹的文件。此外,某些文件夹具有由文件夹中的所有内容(文件、子文件夹、子文件夹中的文件等)继承的安全性。我正在尝试提出一个LINQtoXML查询以根据该文件的GUID获取给定文件的安全性,它适用于level-1和level-2文件,但是当我尝试运行查询时在一个文件上,文件有3个文件夹深,它失败了,我得到一个nullreferenceexception。这是我正在使用的查询:XDocumentsitemap=XDocument.Load(HttpContext.Current.Server.MapPath("/.../sitemap.xml"));XElementfileFromMap=sitemap.Descendants("File").Where(file=>file.Attribute("GUID").Value==guid).First();XElementcurrentFile=newXElement("File",fileFromMap.Value,fileFromMap.Ancestors("Folder").SelectMany(folder=>{XElementsecurity=folder.Element("Security");return(security!=null?security.元素(“角色”):空);}));*归功于我,我在这里得到了查询nullreferenceexception发生在currentFile变量的声明中,我不知道为什么。我确保Guid匹配...并且因为fileFromMap声明正确,我知道我的文件正在被发现。我假设这里需要做的是更好地检查父文件夹的安全性。一旦发现任何安全性,查询就会停止,因为站点的设置方式应该不会有冲突的安全声明。(例如,没有定义安全性的文件夹将位于具有定义安全性的文件夹内)如果我错了,这不是我需要做的,请提供您可能有的任何建议,并随时更改此问题的标题,以更好地记录它。(如果你给我留下对上一个问题的评论可能是最好的,但现在我可以回答这个问题了;)我提供的代码中有一个错误:我认为SelectMany()以Null开头的项目被折叠在与XElement.Add()相同,但我错了。如果在祖先链中存在没有角色的文件夹,SelectMany()将抛出NullReferenceException。我们只需要为它提供一个空的可枚举XElement来解决问题:XElementcurrentFile=newXElement("File",fileFromMap.Value,fileFromMap.Ancestors("Folder").SelectMany(folder=>{XElementsecurity=folder.元素(“安全”);返回(安全!=null?security.Elements(“角色”):新的XElement[0]);}));我将使用反向链接更新我的原始答案。以上就是C#学习教程:LINQtoXML递归查询分享的全部内容。如果对你有用,需要进一步了解C#学习教程,希望大家多多关注。本文收集自网络,不代表立场。如涉及侵权,请点击右边联系管理员删除。如需转载请注明出处:
