0

我想使用 Java 从上到下读取 XML。但是,我不想使用递归函数,因为我希望能够跳转到不同的元素并从该位置开始读取。

我尝试过使用getParent()andindexOf()方法(下面所有三个库都有这些方法)来做到这一点,但它变得非常混乱,主要是因为这些方法不区分属性和元素。

我确信一定有一个简单的方法可以做到这一点,但是在尝试了dom4j、、jdom和之后xom,我仍然没有找到解决方案。

[编辑] 更多信息:

我的朋友想以问答类型的方式制作基于控制台文本的游戏。我决定尝试让它读取 XML 文件,而不是将其硬编码到 java 中,因为 XML 具有一种方便的树状样式。下面是我的 XML 文件的示例:

<disp>Text to be displayed</disp>
<disp>Text to be displayed afterward</disp>
<disp>What is your favorite color?</disp>
<question>
    <answer name="orange">
        <disp>Good choice.</disp>
        <!-- More questions and stuff -->
    </answer>
    <default>
        <disp>Wrong. The correct answer was orange.</disp>
    </default>
</question> 

我不知道像伪编程语言那样使用 XML 是否禁忌。如果有人有其他建议,请随时给他们。

4

3 回答 3

1

您的设计基本上很好,是声明式编程的一个例子。您应该使用 XML 解析器将 XML 文件读入 DOM 或使用 SAX。因为我认为你会想要重新访问节点,所以我怀疑你需要一个 DOM(FWIW 我使用 XOM,xom.nu)。基于 XML 的声明式编程的最佳示例之一是 XSLT,其中数据和命令都是 XML。

我经常使用这个模型。它的优点是数据结构可以是外部的,可以编辑。

(请注意,您的 XML 需要一个根元素)

但它变得非常混乱,主要是因为方法不区分属性和元素。

所有 DOM 或 SAX 工具都非常清楚地区分了属性和元素,所以如果有混淆,那就是其他地方了。

于 2013-05-19T20:07:42.620 回答
0

如果你能展示你想用 XML 片段做什么会很好,但通常如果你想读取任何类型的文件,请使用 java.util.Scanner。

Scanner scan = new Scanner (new File("file.xml"));
while (scan.hasNext()) {
    String theData = scan.nextLine();
}
scan.close();

这应该返回您需要的值,直到它用完要扫描的行。希望它有效,编码愉快!

于 2013-05-19T02:06:52.083 回答
0

由于您要读取 xml 文件。我推荐使用 SAX 解析器。它是基于事件的解析器,对于 xml 读取非常快速和高效(自上而下的方法)。

http://www.mkyong.com/java/how-to-read-xml-file-in-java-sax-parser/将解释 sax 解析器的用法。

谢谢

于 2013-05-19T19:33:04.187 回答