在我的Eclipse项目中,我正在尝试将xml文件解析为字符串列表以显示在jsp文件中。
我的解析器与此代码完美配合:
public class XMLReader{
public static void main(String [] args){
System.out.println(getXML());
}
public static String getXML(){
try{
SAXParserFactory factory = SAXParserFactory.newInstance();
SAXParser saxParser = factory.newSAXParser();
XMLHandler handler = new XMLHandler(); // class I created extending DefaultHandler
saxParser.parse("file.xml",handler);
urls = handler.getXMLList();
}
catch(Exception e){
e.printStackTrace();
}
return urls.toString();
}
}
根据需要将字符串列表打印到我的控制台。 但是当我尝试重写方法以返回一个字符串,以便我可以在我的jsp文件中使用它时:
public class XMLReader{
public String returnXML(){
return getXML().toString();
}
public List<String> getXML(){
...
}
}
我收到了java.io.FileNotFoundException。在我的控制台中,它显示Eclipse正在尝试在包含我的eclipse.exe的文件夹中找到该文件,而不是在我的工作区文件夹中。我一直在互联网上搜索几个小时,但我不知道是什么导致在另一个文件夹中查找。我不确定是否使用非静态方法或使用jsp文件导致文件路径发生变化,但我只是遇到了我的saxParser.parse(文件,处理程序)代码行的这个问题,而且我有不知道如何解决它。任何帮助都会很棒!
答案 0 :(得分:0)
我认为您只需要指定XML文件的完整路径。
如果你正在调用SAXParser.parse(String,DefaultHandler)
,那么Javadoc说字符串是一个URI,所以对于本地文件,它应该被指定为"file://drive/directory/file.xml"
,使用正斜杠作为目录分隔符而不管平台
否则,您可以创建一个File实例,它允许您以平台相关的方式指定文件路径(例如,在Windows中使用反斜杠),并调用SAXParser.parse(File,DefaultHandler)
。
您可能希望动态确定Eclipse工作区文件夹的位置(如果该文件所在的位置)。我不知道该怎么做,但应该有办法。
最后一个建议:命名你的类“XMLReader”可能是一个有点冒险的歧义,因为它有一个具有相同名称的通用接口(org.xml.sax.XMLReader)。