【发布时间】:2018-03-13 06:49:40
【问题描述】:
我的代码将创建一个名为“TrackFileId”的所有 XML 元素值的数组:
XDocument cpldoc = XDocument.Load(cplsource);
var cpltfid = cpldoc.Descendants(cplns + "TrackFileId").ToArray();
然后我需要递归搜索多个父目录(最多 3 级)以查找任何名为“ASSETMAP.xml”的文件,并解析它们以查找与数组中的值匹配的任何元素。
我还没有弄清楚如何从起始目录(变量“文件夹”)中指定 [n] 个目录。但是,这就是我如何在与“文件夹”相同的目录中找到 ASSETMAP 的方法:
string assetmap = Directory.GetFiles(folder, "*ASSETMAP*")[0].ToString();
找到所有 ASSETMAP.xml 文档后,我需要遍历其中的每个“Id”元素以从数组中查找任何匹配值,但我无法让它工作,因为它看起来只是对于数组中的第一项并放弃。在这种情况下,数组中的第一个值不匹配,因此 bool 为 false。
XDocument assetmapdoc = XDocument.Load(assetmap);
bool cpltfidfound = false;
foreach (var assetC in assetElements)
{
var innerElementsC = assetC.Descendants(assetns + "Id").First();
if (!innerElementsC.Value.Equals(cpltfid))
continue;
cpltfidfound = true;
}
if (cpltfidfound)
{
//do something
}
【问题讨论】:
-
可能与
.First()有关。你打算什么时候看剩下的? -
var threeLevelsUp = (new System.IO.DirectoryInfo(path)).Parent.Parent.Parent.FullName; -
我在其他地方使用与
.First()相同的循环并且它有效。 foreach 循环不断检查每个Id元素,直到找到匹配项。感谢目录语法。我会试试的。
标签: c# linq linq-to-xml