1

我的代码有点问题。我想加载一个 XML 文件,从文件中提取数据,例如不同的对象及其属性。我的想法是通过 Filechooser 选择文件,使用 JDOM 通过 XMLparser 获取信息,然后将对象保存在某处,例如数据库。现在我在读取所选文件时遇到问题。为了更好地理解,我的代码看起来像这样:

公共类 xmlparser {

public static void main (String args[]) throws Exception
{       
    JFileChooser chooser = new JFileChooser();
    File f = new File("C:/x");
    chooser.setCurrentDirectory(f);
    chooser.setFileFilter(new OnlyXML());
    chooser.showOpenDialog(null);
    String path = f.getPath().toString();


    DocumentBuilderFactory builderFactory = DocumentBuilderFactory.newInstance();

    try {
        DocumentBuilder docBuilder = builderFactory.newDocumentBuilder();
        Document document = docBuilder.parse(new File(path));
        document.normalize();
        System.out.println(document.getFirstChild().getTextContent());
    }
    catch (ParserConfigurationException e) {
        e.printStackTrace();
    } catch (SAXException e) {
        e.printStackTrace();
    } catch (IOException e) {
        e.printStackTrace();
    }

}   
}

编译后我收到此失败消息:

[Fatal Error] :1:1: Content ist nicht zulässig in Prolog.
org.xml.sax.SAXParseException; systemId: file:/C:/x/; lineNumber: 1; 
columnNumber: 1; Content ist nicht zulässig in Prolog.
at com.sun.org.apache.xerces.internal.parsers.DOMParser.parse(Unknown Source)
at com.sun.org.apache.xerces.internal.jaxp.DocumentBuilderImpl.parse(Unknown Source)
at javax.xml.parsers.DocumentBuilder.parse(Unknown Source)
at XMLParser.xmlparser.main(xmlparser.java:36)
at startmenu.Startmenu$2.mouseClicked(Startmenu.java:78)

第 36 行和第 78 行有故障。 第 36 行:我确定是所选文件的问题,但我不知道是什么。到第 78 行:我从开始菜单类中调用 xmlparser 类,在单击按钮后,我不明白为什么这是一个错误?

这里是它的代码部分:

xmlparser x = new xmlparser();
x.main(null);

只是一个普通的电话。我希望有人能提供帮助,非常感谢你:)

4

1 回答 1

2

我认为您的问题是您没有使用File用户选择的选项,而是使用fJFileChooser. 您可能应该在代码中执行类似的操作:

 File choosenFile = chooser.getSelectedFile();

这将获得所选文件的JFileChooser. 自从我使用该课程以来已经有一段时间了,因此您可能需要在这里阅读一些文档。

选择文件后,您可以解析该文件,而不是创建一个新的File,您可以重新使用文件变量:

  Document document = docBuilder.parse(choosenFile);

我不知道这是否会解决问题,如果您需要更多帮助,请发表评论。

于 2013-08-09T16:43:23.493 回答