方法不读取XML属性

时间:2010-01-13 00:14:18

标签: c# xml

此方法:

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 个答案:

答案 0 :(得分:2)

编辑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()

答案 1 :(得分:0)

试试这个

string[] keywords =
    XElement.Load(filename  )
        .Elements("Keyword" )  // not "Keywords"
        .Attributes("name"  )
        .Select(n => n.Value)
        .ToArray();

答案 2 :(得分:0)

你的逻辑略有偏差。你需要使用: XElement.Load(filename).Element("Keywords").Elements("Keyword").Select(n => n.Attributes("name")FirstOrDefault.value).ToArray

对于每个关键字节点,它将返回 name 属性的值。