簡體   English   中英

如何使用linq檢查xml文件中是否已存在值

[英]How to check if a value already exists in an xml file using linq

盡管對此主題有很多答案,但我找不到適合我的案例的答案。 該應用程序將打開xml文件以從列表中添加新條目,但可以防止重復。 我不知道如何檢查(使用Linq)該項是否已經在xml中

<!-- XML File sample -->
<?xml version="1.0" encoding="UTF-8"?>
<Items>
 <Item>
    <Text>AUDI</Text>
  </Item>
<Item>
  <Text>BMW</Text>
</Item>
</Items>

這是代碼。 (為簡單起見,我省略了修剪,大寫等)問題在於結果var,它始終返回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);

您的問題是:

x.Element("Text").ToString()

要在“ Text節點內獲取字符串,請使用.Value

像這樣:

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);

我相信您是在誤解XML的格式。.您正在尋找與Text元素的InnerXml匹配的InnerXml ,而您在此從未做過。 因此,您需要從Root-> Items-> Item-> Text-> Value移出,這與代碼所發生的不完全相同。

因此,至少需要在Text元素( x.Element("Text").Value )上使用Value引用。 另外,我認為您對Descendants的調用直接返回了Text元素,因此我建議在此之后檢查IEnum並確認此時的xml級別。 我沒有使用過這種方法,但我的理解是,它為您提供了所提供的xpath的后代,這意味着它為您提供了Text元素。 如果是這種情況,將該字符串更改為"Items" ,就可以了。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM