我正在编写一个简单的 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 类?现在我必须投射每个节点。
预先感谢,乔里。
如果你经常这样做,你可以让一个简单的序列化器来处理这个问题。您编写对象并读取对象(如播放器等),序列化程序负责 XML 部分。当您专注于游戏开发时。
从 DOM 手动解析 XML 开始,您已经使用的逻辑就不能再变小了。这是因为,DOM 提供了非常非常基本的导航方法:列出子节点并选择其中一个,重复直到到达所需的节点。这对于轻量级 XML 可能很有用,但当您解析具有许多标记级别的复杂结构时,很快就会变成一场噩梦。
另一种更快的方法是流式处理,不过,XML 结构越复杂,解析器代码就越复杂。
如果您只需要查询 XML 中的特定节点,XPATH也非常有用。但如果您需要完整的 xml 到对象转换,请使用序列化程序。
| 归档时间: |
|
| 查看次数: |
9103 次 |
| 最近记录: |