【问题标题】:c# Search For XML Element Value Based On Array or Listc# 根据数组或列表搜索 XML 元素值
【发布时间】: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


【解决方案1】:

已解决

密钥是 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");
   }

【讨论】:

    猜你喜欢
    • 2019-10-22
    • 1970-01-01
    • 1970-01-01
    • 2020-05-22
    • 1970-01-01
    • 1970-01-01
    • 2021-05-13
    • 2013-03-26
    • 2020-07-26
    相关资源
    最近更新 更多