具有相同标签的libgdx XmlReader子级

时间:2014-04-17 01:36:39

标签: xml libgdx xmlreader

<level levelid="1">
<chapter>1<chapter>
<mintime>100</mintime>
<maxtime>18000</maxtime>
<totalhexes>7</total>
<target>
    <targettype>2</targettype>
    <targetrestraint>0</targetrestraint>
    <targetcondition>2</targetcondition>
    <targetvalue>1980</targetvalue>
</target>
<target>
    <targettype>1</targettype>
    <targetrestraint>0</targetrestraint>
    <targetcondition>0</targetcondition>
    <targetvalue>3000</targetvalue>
</target>

...

尝试阅读不同的目标时。 知道它们是3个目标,我尝试使用以下代码循环遍历它们:

    for (int i = 1; i <= 3; i++) {
        XmlReader.Element star = elements
                .getChildByName("target");
        type = star.getInt("ns1:targettype");
        restraint = star.getInt("targetrestraint");
        condition = star.getInt("targetcondition");
        value = star.getInt("targetvalue");
        target.setTargetstar(i, type, restraint, condition, value);     
    }   

但我总是得到第一个目标的值,如果我将星形设置为以下任何一个并不重要:

XmlReader.Element star = elements.getChildByName("target");

XmlReader.Element star = elements.getChildByNameRecursive("target");

我用什么方法来阅读所有三个“目标”孩子?

2 个答案:

答案 0 :(得分:1)

使用getChildrenByName()

for (XmlReader.Element target : elements.getChildrenByName("target")) {
    // this should be iterated three times, once for each target
}   

答案 1 :(得分:1)

您总是使用getChildByName来接收第一个孩子 相反,您应该使用getChildrenByName,它会为您提供具有此名称的所有孩子。 您可以轻松地使用foreach循环来循环使用它们:

for(XmlReader.Element target : elements.getChildrenByName("target")) {
    type = target.getInt("targettype");
    restraint = element.getInt("targetrestraint");
    // Rest of code here
}