Чтение значений из XML-файла с помощью Linq - PullRequest
3 голосов
/ 01 сентября 2009

У меня проблемы с чтением значений из XML-файла. Вот XML-файл:

<root>
    <defaultGroups name="Sikker">
        <group name="0ASK" />
        <group name="0ASKAPP" />
        <group name="0ASKFELLES" />
        <group name="0SYSAPP" />
        <group name="0SYSAPPoffice" />
        <group name="10WTS" />
    </defaultGroups>
    <defaultGroups name="Intern">
        <group name="11WTS" />
        <group name="1ASK" />
        <group name="1ASKAPP" />
        <group name="1ASKFELLES" />
        <group name="Domain Users" />
        <group name="Askvoll brukere" />
        <group name="1SYSAPP" />
        <group name="1SYSAPPAdobeReader" />
        <group name="1SYSAPPEXCEL" />
        <group name="1SYSAPPIEXPLORER" />
        <group name="1SYSAPPOUTLOOK" />
        <group name="1SYSAPPPOWERPOINT" />
        <group name="1SYSAPPWORD" />
    </defaultGroups>
</root>

С помощью функции, показанной ниже, я должен читать только значения из <defaultGroups name="Sikker"> Я получаю первое значение: «0ASK», но не остальное. Может кто-нибудь, пожалуйста, помогите мне с этим? (Я новичок в Linq)

Это функция C #, которую я использую:

public string GetSikkerSoneDefaultGroups(string companyName)
    {
        string sikkerSone = "";

        XDocument doc = XDocument.Load("xml\\defaults\\" + companyName + ".xml");
        var groups = from defaultGroups in doc.Descendants("defaultGroups")
                     where defaultGroups.Attribute("name").Value == "Sikker"
                     select new
                     {                             
                         g = defaultGroups.Element("group").Attribute("name").Value
                     };

        foreach (var group in groups)
        {
            sikkerSone += group.g + ";";
        }

        doc = null;

        return sikkerSone;

    }

Ответы [ 2 ]

2 голосов
/ 01 сентября 2009

Вы используете:

g = defaultGroups.Element("group").Attribute("name").Value

, который выбирает только первый дочерний элемент defaultGroups. Я думаю, что мы можем немного упростить это, так как при подходе к нему вам потребуется подзапрос. Почему бы не получить элементы группы напрямую?

var groups = from defaultGroup in doc.Descendants("group")
             where defaultGroup.Parent.Attribute("name").Value == "Sikker"
             select defaultGroup.Attribute("name").Value;


// Make it into a string
foreach (var group in groups)
{
     sikkerSone += group + ";";
}
0 голосов
/ 01 сентября 2009
string sikkerSone = string.Join(";",
   (from dg in doc.Descendants("defaultGroups")
    where dg.Attribute("name") == "Sikker"
    from g in dg.Elements("group")
    select (string)g.Attribute("name"))
   .ToArray());
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...