0

昨天我刚刚开始学习如何加载 XML 文件并使用它们来创建对象,所以我遇到了一些小事情,通过大约 15 分钟左右的环顾四周,能够弄清楚所以我决定尝试在这里问他们。

DBLoader:https ://github.com/Valkryst/Project_02/blob/master/src/main/java/valkryst/item/DBLoader.java#L93

XMLParse:
https ://github.com/Valkryst/Project_02/tree/master/src/main/java/valkryst/core/xml

DBLoader 类是我从 XML 文件加载所有变量并根据一些事情创建 Armor 或 Weapon 对象的地方。XMLParse 类只是用来保存一些我发现自己在处理 XML 文件时经常需要的方法。

现在谈谈我的两个问题......

  • 我如何根据我的代码当前在 DBLoader 类中的设置方式检查除了“body”和“/body”的打开和关闭元素之外是否没有其他元素?(将引号替换为 > 和 <。)

    • 加载空文件时如何解决错误“[Fatal Error] :1:1 Premature end of file”?我已经包含了一个 try-catch 块,以在它被捕获后跳过 for 循环的当前迭代。(如果我的第一个问题得到解决,这可能会得到解决。)

我确实有更多问题,但现在是凌晨 4:00 左右,所以我有点不耐烦了,我将把它留在我遇到的两个最重要的问题上。

感谢您的任何回复。

编辑:另一个错误刚刚出现,我似乎无法在我疲惫的心态中弄清楚,所以我将它添加到这篇文章中,以防万一有人在帮助解决我的主要问题时看到问题。

运行 DBLoader 时,由于某种原因,它似乎总是跳过“/XML/Items/Armor/Boot.xml”。我添加了一条打印语句来告诉我文件何时成功加载,但只有“/XML/Items/Armor/Sword.xml”成功完成。它们是我的两个测试 XML 文件,因此只有它们才能成功加载。对不起,如果这听起来很奇怪,我正在睡觉。

4

1 回答 1

0

嗯,不确定这是否是最好的方法,但它确实有效。这进入你的 for 循环。

DocumentBuilderFactory dbFactory = DocumentBuilderFactory.newInstance();
DocumentBuilder dBuilder = dbFactory.newDocumentBuilder();
Document doc;

   File f = new File(paths[i]);
   FileReader fr = new FileReader(f);
   if (fr.read()==-1){
       //file is empty
   }
   else{

        doc= dBuilder.parse(f);
        int n = rankdoc.getChildNodes().getChildNodes().getLength(); 
        // if n > 0, there's something else besides your root element

   }
   fr.close();
于 2013-08-21T07:31:24.723 回答