Libgdx之XML文件解析

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/zqiang_55/article/details/51823509

在游戏开发过程中,经常需要保存游戏数据,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文件的构成
这里写图片描述

结合上面图片来参照下面代码,很容易看出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

猜你喜欢

转载自blog.csdn.net/zqiang_55/article/details/51823509