c#基于数组或列表搜索XML元素值

时间:2018-03-13 06:49:41

标签: c# linq linq-to-xml

我的代码将创建一个名为“TrackFileId”的所有XML元素值的数组:

XDocument cpldoc = XDocument.Load(cplsource);

var cpltfid = cpldoc.Descendants(cplns + "TrackFileId").ToArray();

然后,我需要以递归方式搜索任何名为“ASSETMAP.xml”的文件的父目录(最多3级),并为数组中具有匹配值的任何元素解析它们。

我还没想出如何从起始目录(变量“folder”)指定[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
    }

1 个答案:

答案 0 :(得分:0)

解决

关键是Array.Exists。我还没有添加递归搜索,但这将处理数组搜索:

foreach (var assetC in assetElements)
{
   var innerElementsC = assetC.Descendants(assetns + "Id").FirstOrDefault().Value;

   if (Array.Exists(cpltfids, element => element.Value == (innerElementsC)))
   {
       MessageBox.Show("MATCH");
   }
   else
   {
       MessageBox.Show("NO MATCH");
   }