【问题标题】:XmlPullParser - Pull from elements with a specific parent elementXmlPullParser - 从具有特定父元素的元素中拉取
【发布时间】:2014-07-16 15:11:35
【问题描述】:

考虑这个 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,但是当父 Person 元素具有 id101 时,如何限制 XmlPullParser 循环仅查看 Cars 元素?

【问题讨论】:

    标签: android android-xml xmlpullparser


    【解决方案1】:

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

    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();
    }
    

    【讨论】:

    • 这让我走上了正轨——谢谢!这是处理此类嵌套元素的正确方法,还是只是一种解决方法,使其与我在原始帖子中发布的代码一起工作?
    • @user1003916 不,这不仅仅是一种解决方法:解析器逐个标签读取 XML 标记,因此您必须迭代直到到达所需部分,您不能直接跳转到它。跨度>
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-10-17
    • 1970-01-01
    • 2010-12-14
    • 1970-01-01
    • 2020-08-20
    • 2013-03-18
    • 1970-01-01
    相关资源
    最近更新 更多