在此方法中,将读取XML文件,并将有关它的某些信息放入列表中。我还有其他一切适用于所有代码/其他方法,我只是在返回“list”变量时遇到了麻烦。
package ca3;
import java.io.File;
import java.util.ArrayList;
import java.util.LinkedList;
import java.util.List;
import org.w3c.dom.Document;
import org.w3c.dom.*;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.parsers.DocumentBuilder;
import org.xml.sax.SAXException;
import org.xml.sax.SAXParseException;
public class xmlReader{
public String fileName;
public xmlReader (String fileLoca){
fileName=fileLoca;
}
public List list;
public List returnLists(String fileN)
{
mp3Lister woww = null;
String fName;
String lName;
mp3Lister qwewq;
try {
DocumentBuilderFactory docBuilderFactory = DocumentBuilderFactory.newInstance();
DocumentBuilder docBuilder = docBuilderFactory.newDocumentBuilder();
Document doc = docBuilder.parse (new File(fileN));
// normalize text representation
doc.getDocumentElement ().normalize ();
System.out.println ("Root element of the doc is " +
doc.getDocumentElement().getNodeName());
NodeList listOfPersons = doc.getElementsByTagName("person");
int totalPersons = listOfPersons.getLength();
System.out.println("Total no of people : " + totalPersons);
List list = new LinkedList(); // Doubly-linked list
for(int s=0; s<listOfPersons.getLength() ; s++){
Node firstPersonNode = listOfPersons.item(s);
if(firstPersonNode.getNodeType() == Node.ELEMENT_NODE){
Element firstPersonElement = (Element)firstPersonNode;
//-------
NodeList firstNameList = firstPersonElement.getElementsByTagName("first");
Element firstNameElement = (Element)firstNameList.item(0);
NodeList textFNList = firstNameElement.getChildNodes();
// System.out.println("First Name : " +
// ((Node)textFNList.item(0)).getNodeValue().trim());
//
//-------
NodeList lastNameList = firstPersonElement.getElementsByTagName("last");
Element lastNameElement = (Element)lastNameList.item(0);
NodeList textLNList = lastNameElement.getChildNodes();
// System.out.println("Last Name : " +
// ((Node)textLNList.item(0)).getNodeValue().trim());
lName = textLNList.item(0).getNodeValue().trim().toString();
fName = textFNList.item(0).getNodeValue().trim().toString();
mp3Lister[] wowow = null;
woww = new mp3Lister(fName,lName);
list.add(woww);
//----
//------
}//end of if clause
// qwewq = (mp3Lister) list.get(0);
// System.out.println(qwewq.getTitle() + " wakakakakaka");
}//end of for loop with s var
//end of for loop with s var
}catch (SAXParseException err) {
System.out.println ("** Parsing error" + ", line "
+ err.getLineNumber () + ", uri " + err.getSystemId ());
System.out.println(" " + err.getMessage ());
}catch (SAXException e) {
Exception x = e.getException ();
((x == null) ? e : x).printStackTrace ();
}catch (Throwable t) {
t.printStackTrace ();
}
return list;
//System.exit (0);
}
}
答案 0 :(得分:2)
我假设你打算返回你在list
函数中声明的returnLists
局部变量。您将获得的实际上是类变量,也称为list
。这是因为当代码到达return语句时,本地list
变量已经脱离了上下文(本地list
变量位于您声明的try
块的上下文中) 。如果您想从本地list
变量返回值,请将returnLists
的前几行更改为:
public List returnLists(String fileN)
{
mp3Lister woww = null;
String fName;
String lName;
mp3Lister qwewq;
List list = new LinkedList();
try {
然后删除try块中list
变量的声明。
答案 1 :(得分:0)
首先,你有一个名为list的局部变量和一个名为list的类变量。在行'list = ArrayList();'中和'List list = new LinkedList();'运行时将无法评估它正在评估哪个List实例。当你回来时,你可能会得到毫无意义的无意义结果。
注意我只看了这段代码总共一分钟,所以这很可能是错的,但这就是我立即跳出来的。
答案 2 :(得分:0)
这是您的问题:您已将list
声明为全局变量。在returnList
方法中,您再次在try块中声明变量list
。您应该删除局部变量或删除全局变量。
答案 3 :(得分:0)
您的问题是您从try块外部返回列表,但是您在try块中声明它。 要么声明
List list = null;
在try块之外并实例化
list = new LinkedList();
在try块内。
或
return list;
从try块内部。
我希望这是有道理的......
答案 4 :(得分:0)
返回的列表变量是成员变量列表。因为方法返回列表中的列表变量在try块中声明,一旦控件超出try块,就会结束其范围。所以在try block 之前声明列表变量。