Привет, У меня есть xml файл и строка из активного каталога... Я хочу проверить строку со значением из XML файла.
здесь xml: Permissiongroups.xml
<Permissiongroup>
<Permission canonicalname="OU=dbg,OU=de,OU=zzz,DC=company_test,DC=com" display="group" />
<Permission canonicalname="OU=brv,OU=de,OU=zzz,DC=company_test,DC=com" display="group" />
<Permission canonicalname="OU=EK,OU=brv,OU=de,OU=zzz,DC=company_test,DC=com" display="group" />
</Permissiongroup>
Мой код С#:
string canonicalname = user.canoncialName; //here I get the canonicalname of the search user
//например, здесь "CN = Tarasov \, W, OU = PRG, OU = IT, OU = dbg, OU = de, OU = zzz, DC = компания, DC = com"
string path = Server.MapPath("~/App_Data/Permissiongroups.xml"); // Get XML Path
string group = GetGroup(path, canonicalname); // Get User that match with canonicalname
здесь мой метод:
private string GetGroup(string xml, string canonicalname)
{
XDocument document;
XElement element;
try
{
document = XDocument.Load(xml);
//check every attribute canonicalname in the xml with the string canonicalname
//return display value from the element with attributte canonicalname = canonicalname
}
catch (Exception)
{
return null;
}
finally
{
document = null;
element = null;
}
}
Теперь мой вопрос, как я могу создать цикл в xml, который дает мне значение canoicalname атрибута. Это нужно для проверки его с другой строкой.
Вы можете попробовать следующее:
var permissions = document.Descendants("Permission");
foreach (var p in permissions)
{
Console.WriteLine(p.Attribute("canonicalname").Value);
}
Это просто пример того, как печатать эти значения, но я думаю, что вы сделаете все остальное, потому что я не знаю, что это за требования проверки.
Если вы хотите найти Permission
, соответствующее вашему canonicalname
вы можете попробовать этот код:
var searchedPermission = permissions.FirstOrDefault(p => p.Attribute("canonicalname").Value == canonicalname);
Вы можете использовать подход LINQ to XML. Сначала найдите все атрибуты canonicalname в xml со строковым каноническим именем:
var q = (from c in doc.Descendants("Permission")
where string.Equals(c.Attribute("canonicalname").Value, canonicalname)
select c).ToList();
Затем отобразите значения:
foreach (var item in q)
{
Console.WriteLine(item.Attribute("canonicalname").Value);
}