这是我的代码:
public String[] readXML(String filename) { XmlReader xmlReader = XmlReader.Create(@filename); Listnames = new List (); String[] keywords = null; while (xmlReader.Read()) { //Keep reading if (xmlReader.Name.Equals("Keyword") && (xmlReader.NodeType == XmlNodeType.Element)) { // get attribute from the Xml element here string keywords = xmlReader.GetAttribute("name"); names.Add(keywords); String[] keywordsArray = names.ToArray(); } else { MessageBox.show("An Error Occured"); } } return keywordsArray; }
这会吗?有人可以测试一下吗?
我认为这是因为你的return语句在if循环中.如果循环从不执行,或者if永远不是真的,会发生什么?
你了解自己的代码吗?你想从这个方法返回什么?目前您的代码意味着:
读取XML文件,直到找不到"Keyword"元素.找到"Keyword"元素后,取其值为"name"的属性并将其包装回一个元素数组中.
正如其他人所提到的那样,XML文档可能没有元素.在这种情况下,您将退出循环而不返回任何值.你应该决定在这种情况下该做什么.您可以返回一些特殊值,如"null"或空数组.或者,如果您确定指定的XML文档中至少应存在一个"关键字"元素,那么您可以从方法的末尾抛出一些异常,以指示违反了某些先决条件.
我想你已经尝试用不同的行为编写方法.我相信你的意思是:
读取XML文件并从所有"关键字"元素中收集"name"属性的值,并将收集的值作为字符串数组返回.
这将更有意义,在这种情况下,即使XML文件不包含任何"关键字"元素,您也总会得到一些结果.要实现此类行为,您应该将列表移动到数组转换并将语句返回到方法的末尾.你会得到这样的代码:
public static String[] readXML(String filename) { using(XmlReader xmlReader = XmlReader.Create(@filename)) { Listnames = new List (); while(xmlReader.Read()) { //Keep reading if(xmlReader.Name.Equals("Keyword") && (xmlReader.NodeType == XmlNodeType.Element)) { // get attribute from the Xml element here string keywords = xmlReader.GetAttribute("name"); names.Add(keywords); } } String[] keywordsArray = names.ToArray(); return keywordsArray; } }
请注意,我还在"使用"块中包含了已创建的XmlReader的使用,以确保在我们离开方法之前将其处理掉.