Как я могу сделать цикл в XML-файле, который я получаю значение Attributte?

1

Привет, У меня есть 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 атрибута. Это нужно для проверки его с другой строкой.

Теги:
linq
loops

2 ответа

1
Лучший ответ

Вы можете попробовать следующее:

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);
  • 1
    это помогает мне ... спасибо :)
1

Вы можете использовать подход 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);
}

Ещё вопросы

Сообщество Overcoder
Наверх
Меню