Libgdx之XML文件解析

Posted zqiang_55

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Libgdx之XML文件解析相关的知识,希望对你有一定的参考价值。

在游戏开发过程中,经常需要保存游戏数据,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

以上是关于Libgdx之XML文件解析的主要内容,如果未能解决你的问题,请参考以下文章

Libgdx之JSON文件解析

解析文件时出错:file.g3db,同时在 libgdx 中使用搅拌机对象

python之XML文件解析

Python数据清理之解析XML文件

Libgdx之Music Sound 音效

Libgdx 之SpriteBatch深入分析