此方法:
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>
有什么问题?
答案 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 属性的值。