java - 循环通过 XML 来构建对象

标签 java android xml

所以我想做的是循环遍历如下所示的 XML 文件,并将内容保存到每个“屏幕”的对象中。

我的XML如下:

<?xml version="1.0" encoding="utf-8"?>
<screens>
    <screen id="house" backdropimage = "R.drawable.scene">
        <region id="one" rleft = "200" rright = "200" rtop = "10" rbottom = "10"/>
        <region id="two" rleft = "220" rright = "220" rtop = "12" rbottom = "12"/>
        <paths left = "park" right = "x" top = "x" bottom = "x"/>
    </screen>
    <screen id="park" backdropimage = "R.drawable.park">
        <region id="1" rleft = "500" rright = "200" rtop = "10" rbottom = "10"/>
        <paths right = "house" left = "x" top = "x" bottom = "x"/>
    </screen>
</screens>

所以我的想法是,我在屏幕数组中创建一个对象,其中包含每个屏幕 block 中的信息。 id 和背景都很好,但我在迭代“区域”部分时遇到问题,因为不同部分中会有不同数量的区域条目。这是我当前使用的代码,由于某种原因,它会经历“一”、“二”和“1”,我希望它在/screen 处停止。

    depth = parser.getDepth();
            while(parser.getDepth() == depth) { 

                if(event==XmlPullParser.START_TAG && parser.getName().contentEquals("region")) {
                    Region reg = new Region(parser.getAttributeIntValue(null, "rleft", 0),
                            parser.getAttributeIntValue(null, "rtop", 0),
                            parser.getAttributeIntValue(null, "rright", 0),
                            parser.getAttributeIntValue(null, "rbottom", 0));
                    //String str = parser.getIdAttribute();
                    newScreen.area = (reg);
                    //Rect temp = reg.getBounds();
                    newScreen.areaArray.add(reg);
            parser.next();
            }   

这是我第一次尝试在 java/android 中使用 XML 文件,总体来说我对 Java 还很陌生,所以我确信我在这里没有使用最好的方法,并且希望得到任何帮助。谢谢

最佳答案

我使用 Simple-xml 将 xml 序列化为对象。 他们有非常好的文档,您可以在这里获取该库:http://simple.sourceforge.net/

这是一个例子:

YourActivity.java

import org.simpleframework.xml.Serializer;
import org.simpleframework.xml.core.Persister;

....
private Screens myScreens;

....


private void serializeMyXml(){
        File source = new File("directory/yourXmlFile.xml");
        Serializer serializer = new Persister();
        try {
            myScreens= serializer.read(Screens.class, source);

        } catch (Exception e) {
            e.printStackTrace();
        }
}

Screens.java

import java.io.Serializable;
import java.util.List;

import org.simpleframework.xml.ElementList;
import org.simpleframework.xml.Root;

@Root
public class Screensimplements Serializable{

    /**
     * 
     */
    private static final long serialVersionUID = 1111;//some random unique serialversion id

    @ElementList(inline=true)
    private List<Screen> list;

    public List<Screen> getList() {
        return list;
    }

}

Screen.java

    import java.io.Serializable;

    import org.simpleframework.xml.Attribute;

    public class Entity implements Serializable{

        /**
         * 
         */
        private static final long serialVersionUID = 5004451486040850151L;

        @Attribute
        private String backdropimage;

        @Attribute
        private int id;

        @ElementList
        private List<Region> region;

@Element
private Paths paths;

        public int getId() {
            return id;
        }

        public String getBackdropimage() {
            return backdropimage;
        }

    }

等等..等等..在文档中阅读更多相关信息。

祝你好运

关于java - 循环通过 XML 来构建对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6778589/

相关文章:

java - 代码换行 - 如何处理长行

java - 在服务器运行时将表内容从 Oracle DB 加载到 Spring Bean

python - 使用python lxml循环提取文本的问题

python - 使用 elementTree 编辑和复制 xml block

java - XML 文档 - 检查父节点,然后迭代文档

java - 如果在 libgdx 中单击了 box2d 主体,如何注册?

android - 如何将 Lottie 文件设置为菜单项?

Android - Firebase App Indexing App 未显示在谷歌自动完成建议中

android - 使用OpenGL ES 2.0在Android上创建音频波

c# - 如何创建带前缀的 XmlElement 属性?