在C#中搜索字符串到Xml文件

时间:2014-01-21 12:22:26

标签: c# xml

<AccessUrl>  
  <Url>/User/Index</Url>
  <Url>/EmailAccounts/Index</Url>
  <Url>/Registration/Index</Url>
</AccessUrl>  

我有一个xml文件。我想用它来搜索一个字符串。我为它编写了一个C#代码。

string Url="/User/Index";// or One of the above value from file.
var CheckPermission = (from a in doc.Elements("AccessUrl")
                                   where a.Element("Url").Value.Contains(Url)
                                   select a).Any();

但它只适用于文件中的第一个Url值。但是,如果我改变string Url="/EmailAccounts/Index";。它甚至没有显示任何匹配,即使xml文件中存在url值。我尝试了很多,但还没有成功。

3 个答案:

答案 0 :(得分:2)

这是因为a.Element("Url")为您提供了具有指定名称的第一个子元素。你应该用所有的孩子来代替:

a.Elements("Url").Any(u => u.Value.Contains(Url))

答案 1 :(得分:0)

这是因为你打电话:

where a.Element("Url")

这将返回第一个匹配元素。

来自文档:

  

获取具有指定System.Xml.Linq.XName的第一个(按文档顺序)子元素

你需要使用这样的东西来检查所有元素:

var CheckPermission = (from a in doc.Descendants("Url")
                               where a.Value.Contains(Url)
                               select a).Any();

答案 2 :(得分:0)

这似乎有效。

        string url="/EmailAccounts/Index";// or One of the above value from file.
        var checkPermission = xml.Elements("AccessUrl").Elements("Url").Any(x => x.Value == url);