Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/299.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何使用linq检查xml文件中是否已经存在值_C#_Xml_Linq - Fatal编程技术网

C# 如何使用linq检查xml文件中是否已经存在值

C# 如何使用linq检查xml文件中是否已经存在值,c#,xml,linq,C#,Xml,Linq,虽然这个问题有很多答案,但我找不到一个适合我的答案。 应用程序打开xml文件,从列表中添加新条目,但防止重复。我不知道如何检查(使用Linq)该项是否已经在xml中 奥迪 宝马 这就是代码。(为了简单起见,我省略了修剪、大写等) 问题在于result变量,它总是返回false XDocument doc = XDocument.Load(@filePath); for (int i = 0; i < items.Count; i++) { var result = doc

虽然这个问题有很多答案,但我找不到一个适合我的答案。 应用程序打开xml文件,从列表中添加新条目,但防止重复。我不知道如何检查(使用Linq)该项是否已经在xml中


奥迪
宝马
这就是代码。(为了简单起见,我省略了修剪、大写等) 问题在于result变量,它总是返回false

XDocument doc = XDocument.Load(@filePath);
for (int i = 0; i < items.Count; i++)
  {
     var result = doc.Descendants("Item").Any(x => x.Element("Text").ToString().Equals(items[i]);

     if (! result)
          {

          }

doc.Save(@filePath);
XDocument doc=XDocument.Load(@filePath);
对于(int i=0;ix.Element(“Text”).ToString().Equals(items[i]);
如果(!结果)
{
}
单据保存(@filePath);
您的问题是:

x.Element("Text").ToString()
要获取
文本
节点内的字符串,请使用

像这样:

XDocument doc = XDocument.Load(@filePath);
for (int i = 0; i < items.Count; i++)
{
    var result = doc.Descendants("Item").Any(x => x.Element("Text").Value.Equals(items[i]));

    if (!result)
    {

    }
}

doc.Save(@filePath);
XDocument doc=XDocument.Load(@filePath);
对于(int i=0;ix.Element(“Text”).Value.Equals(items[i]);
如果(!结果)
{
}
}
单据保存(@filePath);
您的问题是:

x.Element("Text").ToString()
要获取
文本
节点内的字符串,请使用

像这样:

XDocument doc = XDocument.Load(@filePath);
for (int i = 0; i < items.Count; i++)
{
    var result = doc.Descendants("Item").Any(x => x.Element("Text").Value.Equals(items[i]));

    if (!result)
    {

    }
}

doc.Save(@filePath);
XDocument doc=XDocument.Load(@filePath);
对于(int i=0;ix.Element(“Text”).Value.Equals(items[i]);
如果(!结果)
{
}
}
单据保存(@filePath);

我认为您误解了XML的格式。您正在寻找与
文本
元素的
InnerXml
相匹配的元素,而您在这里从未这样做过。因此,您需要从根->项->项->文本->值移动,这与您的代码不完全相同


因此,您至少需要在
Text
元素(
x.element(“Text”).Value
)上使用
值另外,我认为您对
子体的调用会直接返回
Text
元素,因此我建议在此之后检查IEnum,并确认您当时的xml级别。我没有使用该方法,但我的理解是,它会为您提供xpath的子体,这意味着它不会为您提供ext元素。如果是这种情况,请将该字符串更改为
“Items”
然后你就可以走了。

我相信你误解了XML的格式。你正在寻找与
文本
元素的
InnerXml
相匹配的内容,而你在这里从来没有这样做过。因此你需要从根->项->项->文本->值移动,而这与你的代码并不完全一致

因此,您至少需要在
Text
元素(
x.element(“Text”).Value
)上使用
值另外,我认为您对
子体的调用会直接返回
Text
元素,因此我建议在此之后检查IEnum,并确认您当时的xml级别。我没有使用该方法,但我的理解是,它会为您提供xpath的子体,这意味着它不会为您提供ext元素。如果是这种情况,将该字符串更改为
“Items”
,您就可以开始了