XmlPullParser - 从具有特定父元素的元素中拉出

时间:2014-07-16 15:11:36

标签: android android-xml xmlpullparser

考虑这个XML。它描述了人员和他们拥有的汽车的清单。

<People>
    <Person id="100">
        <Name>Bob</Name>
        <Cars>
            <Car>
                <Make>Toyota</Make>
                <Model>Celica</Model>
            </Car>
        </Cars>
    </Person>
    <Person id="101">
        <Name>Jim</Name>
        <Cars>
            <Car>
                <Make>Ford</Make>
                <Model>Pinto</Model>
            </Car>
            <Car>
                <Make>Dodge</Make>
                <Model>Viper</Model>
            </Car>
        </Cars>
    </Person>
</People>

我已经创建了一个解析器,它将通过并获取:

ID: 100, Name: Bob
ID: 101, Name: Jim

但是我正在努力解决这个问题并抓住嵌套的元素,这些元素是特定父母的孩子。

while (eventType != XmlPullParser.END_DOCUMENT) {
    String name = null;
    switch (eventType) {
        case XmlPullParser.START_DOCUMENT:
            // do something
            break;                      
        case XmlPullParser.START_TAG:                               
            name = parser.getName();
            if (name.equalsIgnoreCase("Cars")) {                    

                // how do i restrict this to only cars under person with ID 101?

            } 

让我们说我只想知道吉姆有什么样的车。我知道Jim的ID是101,但是当父Cars元素Person为{{1}时,如何限制XmlPullParser循环仅查看id元素}}?

1 个答案:

答案 0 :(得分:3)

您可以使用标志来了解解析器当前的位置,例如:

boolean personFound = false;
boolean carsFound = false;
while (eventType != XmlPullParser.END_DOCUMENT) {
    if (XmlPullParser.START_TAG && parser.getName().equals("Person") && parser.getAttributeValue(0).equals("101")) {
        personFound = true;
    }
    if (personFound && XmlPullParser.START_TAG && parser.getName().equals("Cars")){
        carsFound = true
    }
    if (carsFound) {
        // Do something useful
    }
    if (carsFound && XmlPullParser.END_TAG && parser.getName().equals("Cars"){
        break;
    }
    eventType = parser.next();
}