2014-01-21 76 views
1
<AccessUrl> 
    <Url>/User/Index</Url> 
    <Url>/EmailAccounts/Index</Url> 
    <Url>/Registration/Index</Url> 
</AccessUrl> 

我有一個xml文件。我用魔杖在其中搜索一個字符串。我爲它編寫了一個C#代碼。在C#中搜索字符串到Xml文件#

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";。它甚至沒有顯示任何匹配的URL值存在於XML文件。我試了很多,但沒有成功呢。

回答

2

這是因爲a.Element("Url")爲您提供了具有指定名稱的第一個子元素。你應該通過所有兒童,而不是像這樣:

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

感謝它的工作就像一個魅力。 –

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(); 
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); 
+0

值得一提的是,由於您使用'=='而不是.'Contains(url)',因此它的行爲與預期略有不同。 – DGibbs