当前位置: 首页 > 知识库问答 >
问题:

Libgdx XML访问子里面的子

彭烨烁
2023-03-14

我有一个这样的xml文件:

<main>
    <zone id="A1">
        <area id="house">
            <sprite>test.jpg</sprite>
            <location x="33" y="345"/>
            <sprite>test.jpg</sprite>
            <location x="33" y="345"/>
            <text id="1">text example</text>
            <text id="2">text example</text>
            <text id="3">text example</text>
            <text id="4">text example</text>
            <text id="5">text example</text>
            <text id="6">text example</text>
            <text id="7">text example</text>
            <text id="8">text example</text>
            <text id="9">text example</text>
            <text id="10">text example</text>
        </area>
    </zone>
    <zone id="A2">
        <area id="house">
            <sprite>test2.jpg</sprite>
            <location x="32" y="11"/>
            <text id="1">text example</text>
            <text id="2">text example</text>
            <text id="3">text example</text>
        </area>
    </zone>
</main>

我有主元素作为根元素,2个子元素称为区域,具有不同的id,区域元素内部还有另一个元素称为具有不同id的区域。我要读取的所有数据都在区域元素内。我需要创建一个带有两个参数zoneIdareaId的函数来读取特定的区域信息,并将其作为数组或对象返回。

共有1个答案

左丘善
2023-03-14

这里有一个解决你问题的方法:

private void readXml(String zoneToFind, String areaToFind) {
    XmlReader reader = new XmlReader();
    try {
        XmlReader.Element root = reader.parse(Gdx.files.internal("test.xml"));
        Array<XmlReader.Element> zones = root.getChildrenByName("zone");
        for (XmlReader.Element zone : zones) {
            if (zoneToFind.equals(zone.getAttribute("id"))) {
                Array<XmlReader.Element> areas = zone.getChildrenByName("area");
                for (XmlReader.Element area : areas) {
                    if (areaToFind.equals(area.getAttribute("id"))) {
                        for (int i = 0; i < area.getChildCount(); i++) {
                            XmlReader.Element child = area.getChild(i);
                            child.getName();
                            child.getText();
                            child.getAttributes();

                        }
                    }
                }
            }
        }
    } catch (IOException e) {
        // proper exception handling
    }

}

说明:

>

  • 首先,你应该通过

    XmlReader。元素根=读取器。解析(Gdx.files.internal(“test.xml”);

    test.xml应该位于Android资产文件夹中

    请注意,当没有匹配项时,您应该正确处理这些情况。

    最后,我们知道当前区域是我们正在寻找的,所以你可以遍历它的所有子对象,做任何你需要的事情。但这三种方法应能返回有关元素的足够信息:

    child.getName(); -- name is like sprite, location... 
    child.getText(); -- text is like text example... 
    child.getAttributes(); - attributes are id, x, y...
    

  •  类似资料:
    • 问题内容: 第一。我知道关于如何访问jar文件中的图像已经存在各种主题。第二。我尝试了很多选择,但没有一个没有用。我当然知道在某个地方我犯了一个错误。您能帮助我了解我在做什么错吗? 因此,我有一个名为“ j”的原型项目,它仅包含一个Java类- 客户端。客户端尝试访问图像good.png。将所有文件打包到可执行jar文件后,客户端将无法访问文件。我在月食中工作,并使用蚂蚁。 com.pupcom.

    • 问题内容: 如果我有以下控制器: 读出的正确方法是什么?如果有必要定义中,也不会使它语义上不正确假设是描述相关的东西的属性,而不是? 更新: 对此进行进一步的思考,如果一个孩子有多个孩子,将会在检索上产生冲突。我的问题是,什么是访问的正确方法是从? 问题答案: AngularJS中的作用域使用原型继承,当在子作用域中查找属性时,解释器将从子对象开始查找原型链,并继续寻找父对象,直到找到该属性为止,

    • 关于使用 Iframe 进行跨域访问 localstorage 的问题。 A 页面:http://127.0.0.1:5173/localstorage. 新窗口打开进行 localstorage.setItem("token", "test") B页面:http://localhost:7456/localstorage.html 中想要访问 A 页面的 localstorage. 方法尝试使用

    • 怎么可以让这个 self.logger 属于子类(不是直接添加到子类属性这种方式),并且可以运行

    • 我有一个名为的组件,还有一个子组件名为。智利组件有一个名为的状态。我需要从AvailabiltyCalendar组件访问该状态并获取该状态值。我该怎么做呢。 可用压路机组件 DatePicker组件

    • 问题内容: 我正在编写一个python软件包,其中包含需要在子目录中打开数据文件的模块。现在,我已经将文件的路径硬编码到了我的类和函数中。我想编写更健壮的代码,无论子目录在用户系统上的安装位置如何,都可以访问该子目录。 我尝试了多种方法,但是到目前为止,我还没有运气。似乎大多数“当前目录”命令返回系统的python解释器的目录,而不是模块的目录。 看来这应该是一个微不足道的普遍问题。但是我似乎无法