c# 根据数组或列表搜索 XML 元素值
c# Search For XML Element Value Based On Array or List
我有代码可以创建一个包含所有 XML 个元素值的数组,名为 "TrackFileId":
XDocument cpldoc = XDocument.Load(cplsource);
var cpltfid = cpldoc.Descendants(cplns + "TrackFileId").ToArray();
然后我需要递归搜索多个父目录(最多 3 级以上)以查找任何名为 "ASSETMAP.xml" 的文件,并解析它们以查找具有数组中匹配值的任何元素。
我还没有想出如何从起始目录(变量 "folder")指定 [n] 个目录。然而,这是我如何找到 ASSETMAP 只是在与 "folder" 相同的目录中查找,它有效:
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
}
已解决
关键是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");
}
我有代码可以创建一个包含所有 XML 个元素值的数组,名为 "TrackFileId":
XDocument cpldoc = XDocument.Load(cplsource);
var cpltfid = cpldoc.Descendants(cplns + "TrackFileId").ToArray();
然后我需要递归搜索多个父目录(最多 3 级以上)以查找任何名为 "ASSETMAP.xml" 的文件,并解析它们以查找具有数组中匹配值的任何元素。
我还没有想出如何从起始目录(变量 "folder")指定 [n] 个目录。然而,这是我如何找到 ASSETMAP 只是在与 "folder" 相同的目录中查找,它有效:
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
}
已解决
关键是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");
}