在游戏开发过程中,经常需要保存游戏数据,XML文件就是一个不错的选择。Libgdx也提供我们一个轻量级的解析工具XmlReader,XmlReader能够解析出XML文件的子元素,属性,文本等,同时要保证文件是UTF-8编码,否则文件无法解析
public XmlReader.Element parse(FileHandle file) throws java.io.IOException 方法解析XML元素,返回Element对象,之后对XML各个元素的操作就交给Element来处理
XmlReader.Element 代表了XML的元素,提供了各个方法来获取XML的子元素和元素属性,下面截图展示了XML文件的构成
public class XMLTest extends ApplicationAdapter {
@Override
public void create() {
try {
XmlReader reader = new XmlReader();
/** * root是整个xml文件从根节点算起,此处是指<Credits> </Credits> */
Element root = reader.parse(Gdx.files.internal("Book.xml"));
// System.out.println(root);
System.out.println("root.name:" + root.getName());
//
System.out.println("child num: " + root.getChildCount());
Element bookElement = root.getChildByName("Book"); // <Book year="2014" pages="300" >Libgdx Game Development Cookbook</Book>
System.out.println("Name:" + bookElement.getName());
System.out.println("Title: " + bookElement.getText());
System.out.println("Year: " + bookElement.getInt("year")); // Attributes 通过属性名称来访问
// System.out.println("Number of pages: " + bookElement.getInt("pages")); // 也可以通过方法getAttribute
System.out.println("Number of pages: " + bookElement.getIntAttribute("pages")); // 和上面方法效果一样
Array<Element> authors = root.getChildrenByNameRecursively("Author"); // 递归遍历,否则的话返回null
/** 下面的方法也能遍历出author来 上面方法是同Author来获取读者,一步到位,下面是通过Authors来获取读者节点,还要接着解析节点 Element authorsElement = root.getChildByName("Authors"); int childNum = authorsElement.getChildCount(); for (int i = 0; i < childNum; i++) { System.out.println(" * " + authorsElement.getChild(i).getText()); } */
System.out.println("Authors: ");
for (Element author : authors) {
System.out.println(" * " + author.getText());
}
Array<Element> reviewers = root.getChildrenByNameRecursively("Reviewer");
System.out.println("Reviewers: ");
for (Element reviewer : reviewers) {
System.out.println(" * " + reviewer.getText());
}
} catch (Exception e) {
e.printStackTrace();
}
Gdx.app.exit();
}
}
在实际游戏开发过程中解析出XML文件还要继续处理解析出的数据,其过程要比这个复杂的多,在练习的过程中用有写过十滴水的代码,里面就用到了XML文件解析,有感兴趣的可以参照: https://github.com/Strong-it/TenWater_Libgdx