Метод не читает атрибуты XML - PullRequest
1 голос
/ 13 января 2010

Этот метод:

public static string[] getKeywords(string filename)
{
    string[] keywords = XElement.Load(filename).Elements("Keyword").Attributes("name").Select(n => n.Value).ToArray  
    return keywords;
}

Не читает файл XML. Я даже проверил каждое место, где он назывался, и это привело к getKeywords Я даже проверил это

string[] test = getKeywords("APIs\\cmake.xml");
textbox.Text = test[0];

И я получаю исключение ArrayIndexOutOfBounds. Файл XML доступен для этого метода. Просто он не читает атрибут. Вот пример XML-файла:

<Keywords>
...
<Keyword name ="if" />
<Keyword name ="else" />
...
</Keywords>

Что не так?

Ответы [ 3 ]

2 голосов
/ 13 января 2010

EDIT : вызов Elements("Keyword") возвращает перечисляемый элемент, содержащий все элементы Keyword, которые находятся непосредственно в корне документа. Поскольку их нет (корень документа содержит один элемент Keywords (множественное число)), вы не получите никаких значений.

Вам нужно получить все элементы Keyword в документе, например:

return XElement.Load(filename)
               .Descendants("Keyword")
               .Attributes("name")
               .Select(n => n.Value)
               .ToArray()

Кроме того, вы можете явно получить все элементы Keyword внутри элемента Keywords, например: (Это не приведет к получению элементов Keyword, которые находятся внутри других элементов)

return XElement.Load(filename)
               .Element("Keywords")
               .Elements("Keyword")
               .Attributes("name")
               .Select(n => n.Value)
               .ToArray()
0 голосов
/ 13 января 2010

У вас логика слегка отключена. Вам необходимо использовать: XElement.Load(filename).Element("Keywords").Elements("Keyword").Select(n => n.Attributes("name")FirstOrDefault.value).ToArray

Для каждого узла ключевого слова возвращается значение атрибута name .

0 голосов
/ 13 января 2010

Попробуйте это

string[] keywords =
    XElement.Load(filename  )
        .Elements("Keyword" )  // not "Keywords"
        .Attributes("name"  )
        .Select(n => n.Value)
        .ToArray();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...