Java XML:获取嵌套元素

Jor*_*ori 5 java xml

我正在编写一个简单的 Java 游戏,我想将玩家数据保存到 XML 编码的保存文件中。目前我正在探索 Java XML DOM API,我有一个简短的问题。

假设我有以下 XML 文件(我知道这没有意义,但这只是一个示例)

<?xml version="1.0"?>
<savedGame>
    <name></name>
    <player>
        <name>YOU</name>
        <map>
                        <health>2000</health>
            <name>map_test.map</name>
            <position>
                <x>0</x>
                <y>0</y>
            </position>
        </map>
        <stats>
            <health>1000</health>
            <xp>
                <melee></melee>
                <magic></magic>
                <ranged></ranged>
                <agility></agility>
            </xp>
        </stats>
        <items>
            <item id="0">
                <amount></amount>
            </item>
        </items>
    </player>
</savedGame>
Run Code Online (Sandbox Code Playgroud)

现在我想获取玩家的健康水平(请注意,地图部分还有其他健康元素)。这可以通过以下代码完成:

String hp = ((Element) ((Element) savedGameDocument.getElementsByTagName("player").item(0)).getElementsByTagName("stats").item(0)).getElementsByTagName("health").item(0).getTextContent()
Run Code Online (Sandbox Code Playgroud)

它有效,是的。但这对我来说看起来很恶心。这是获取这些嵌套元素的常用方法吗?为什么没有 ElementList 类?现在我必须投射每个节点。

预先感谢,乔里。

S.D*_*.D. 1

如果你经常这样做,你可以让一个简单的序列化器来处理这个问题。您编写对象并读取对象(如播放器等),序列化程序负责 XML 部分。当您专注于游戏开发时。

从 DOM 手动解析 XML 开始,您已经使用的逻辑就不能再变小了。这是因为,DOM 提供了非常非常基本的导航方法:列出子节点并选择其中一个,重复直到到达所需的节点。这对于轻量级 XML 可能很有用,但当您解析具有许多标记级别的复杂结构时,很快就会变成一场噩梦。

另一种更快的方法是流式处理,不过,XML 结构越复杂,解析器代码就越复杂。

如果您只需要查询 XML 中的特定节点,XPATH也非常有用。但如果您需要完整的 xml 到对象转换,请使用序列化程序。