【问题标题】:Parsing XML in Android from xml从 xml 解析 Android 中的 XML
【发布时间】:2015-07-27 13:59:27
【问题描述】:

我想解析存储在我的 res/xml/ 文件夹中的 XML 文件。我尝试了不同的方法来做到这一点,但我总是在同一个地方得到 NullPointerExeption。

我尝试了不同的方法...但我仍然一无所获...而且我不明白为什么。

这里是代码

private void readXMLproducts (){
    try {
        Log.d(TAG, "readXMLproducts start");
        Product product = new Product();

        XmlPullParser dataParser = getResources().getXml(R.xml.products);
        dataParser.setFeature(XmlPullParser.FEATURE_PROCESS_NAMESPACES, false);

        int eventType = dataParser.getEventType();

        while (eventType != XmlPullParser.END_DOCUMENT) {
            if(dataParser.getName().equals("product")) {
                product.setId(Integer.parseInt(dataParser.getAttributeName(0)));

            }
            if (dataParser.getName().equals("title")){

                product.setTitle(dataParser.getText());

            } else if (dataParser.getName().equals("icon")){

                product.setIcon(dataParser.getText());

            } else if (dataParser.getName().equals("screenshots")){

                eventType = dataParser.next();
                while (dataParser.getName().equals("image")) {


                    product.addScreenshot(dataParser.getText());
                }
            } else if (dataParser.getName().equals("short_description")){


                product.setShort_descr(dataParser.getText());
            } else if (dataParser.getName().equals("description")) {


                product.setDescription(dataParser.getText());
            }
            eventType = dataParser.next();
        }
    } catch (XmlPullParserException e) {
        e.printStackTrace();
    } catch (IOException e) {
        e.printStackTrace();
    }
}

我明白了 .XmlPullParserException:不支持的功能:http://xmlpull.org/v1/doc/features.html#process-namespaces 如果在 setFeature 中是 false 我在原始“dataParser.getName()”处得到 NullPointerException 如果在 setFeature 中是 true

我的 Xml 的一部分

<?xml version="1.0" encoding="utf-8"?>

<product id="1">
    <title>Сверхъяркий фонарик</title>
    <icon>https://lh6.ggpht.com/POKqqdaXjDqk-84U-3PjIRip78I_As54FGYMFKVu-T3t0OxuXdV7oslBIJjpXCEkQA8n=w300-rw</icon>
    <screenshots>
        <image>https://lh3.ggpht.com/UHE-g47boS9oGrOdc9LBBvnjdRSwnsvW4a_u_3nYyq14VI0nqaMsn-Fu_2gD7pZgOg=h900-rw</image>
        <image>https://lh6.ggpht.com/CUsV3J7EyuZ3ru_Ho-jH6CC8w9G8s5TAqOAhPn-i7cLEQLE9MZWHshRoA-ry8IKAYw=h900-rw</image>
        <image>https://lh6.ggpht.com/wHvpFvayqSpDjkTTOZbOUfDt1qc18ox5_knRX9rgD12XX4WfhKlvp5yCLZ3RtbXnNrE=h900-rw</image>
        <image>https://lh3.ggpht.com/0hwPGKS1UpEqUzhpt7W9LbSJs1wVPraPQuOuzLqAHGXOlbtggd691QxiXa6HukkQoFs=h900-rw</image>
    </screenshots>
    <short_description>Фонарик мини мгновенно превращает телефон в РЕАЛЬНО самый яркий фонарик!</short_description>
    <description>Функции:
        - Самый яркий из имеющихся фонариков - гарантируем! 
        - Удобство - включение/выключение света как у настоящего фонарика 
        - Поддержка стробоскопа/режима мерцания - регулируемая частота мерцаний 
        - Потрясающая графика - это самый красивый фонарик, который может попасть вам в руки!</description>

</product>

<product id="2">
    <title>Клавиатура Ginger</title>
    <icon>https://lh3.googleusercontent.com/nEpmo2uNONVctkm9f4ZOPOoppb3QqW2rEw5UGPWtc0BOTC-87lsjbCNQI_n4zdhYcwA=w300-rw</icon>
    <screenshots>
        <image>https://lh3.googleusercontent.com/0_NOjQhEbPGCgQuo6vC-KjGY4Ab6RbFZ1yOopHKM6JNxDQbW4n0HJdIJyOgH4wDLL-0=h900-rw</image>
        <image>https://lh3.googleusercontent.com/rpz_oORgU8pVZbSeboidrnXsdaiRYpzEZItar7D-_e9e8-qBdFehs59MYWvhGSoQnwQ3=h900-rw</image>
        <image>https://lh3.googleusercontent.com/seK1jpk70fmDz1J0OwaR7wJMY7M0mMzxkuEqBzD7jUg-2-Ngv6VOQoSF9fI2NJ87rvM=h900-rw</image>
        <image>https://lh3.googleusercontent.com/LJFhijM1SrpALV1WKSMiCbU_8PISZ7Udv7LmWoD7ic_uW87ZmtaL6K0SUv3-7qryAy4=h900-rw</image>
    </screenshots>
    <short_description>Лучшая клавиатура из имеющихся на рынке теперь доступна и на русском языке!</short_description>
    <description>Ginger позволяет пользователям быстро набирать граматически и лексически выверенные сообщения. Клавиатура Ginger просто поразительно умна и делает набор текста веселым занятием!</description>

</product>

<product id="3">
    <title>Jelly Jump</title>
    <icon>https://lh5.ggpht.com/X1PI7PnhJnGXGV8gXGVJyFzM31wsnuzmvJESgS9Nj70dhQziYpCsM3M5rozAykLpglTP=w300-rw</icon>
    <screenshots>
        <image>https://lh3.ggpht.com/k0AseamDORFvnX7C0U8J3_lvko4uuluxSDV3_0TNfHN8ix7URhb71QYKQFL4LYk0XdJR=h900-rw</image>
        <image>https://lh4.ggpht.com/FZr1ctwofyxrk7qooupcZZvhzcfRuAyc8fx8gxNnMfMTdxhRsNDTQ5TT5AioNt-yOV0=h900-rw</image>
        <image>https://lh5.ggpht.com/lH3t5daHKBG0FgxnUwLG0nyY6cC5RfHxL_gRnOoFZKM695T6QiKnPDgkBMSiB6PMXwo5=h900-rw</image>
        <image>https://lh6.ggpht.com/YCTTKvjjkSPEhOhCVtEFj8b8zD3WrH_CWrAqkUrW-yDVL6DkprxOd4KHqR6x7EZLLAg=h900-rw</image>
    </screenshots>
    <short_description>Маленькие желешки никогда ещё не нуждались в тебе так сильно! Они тонут, снова и снова. И только ты можешь помочь им!</short_description>
    <description>Прыгай выше, выживай дольше и никогда не сдавайся! Собирай капельки и создавай из них новые желешки. Бросай вызов своим друзьям!</description>

</product>

<product id="4">
    <title>Эпоха Спарты</title>
    <icon>https://lh3.googleusercontent.com/XMKtX1pCPcRbYRYNHBEybxgSE-2vAkFv15DyN_Q_8Wm_lEA6U4n0z9eceC4_UISKBbM9=w300-rw</icon>
    <screenshots>
        <image>https://lh6.ggpht.com/Q1CqudFnnHGBqLiONnPaJCVOVV3pTrrTYGc6wYI8WYNJT7mRLz2CyuJ8HghF78HJ2IE=h310-rw</image>
        <image>https://lh3.ggpht.com/ANjOfKs64PwqLAjN0So0pXUA7otJHy6IUolw_uk-_dFy55FIQT6_5MBDHHyEP-EnA1E=h900-rw</image>
        <image>https://lh4.ggpht.com/Dp79R2ZHaCcfrurA1ryLwxfID3MXIaUbzuNeAmnB-QXfSdGM3QYXT2Es27giv6CUP5o=h900-rw</image>
        <image>https://lh6.ggpht.com/AIJbpTHJVqerUYBkWhMXcm7ZuFiqPgIzMio3_GtTmkY_JMIKfk6qAKY0a6FBZyx-2_-F=h900-rw</image>
    </screenshots>
    <short_description>Объединив силы людей и богов, избавьте Древнюю Грецию от персидского ига!</short_description>
    <description>ступайте в бой - вас зовет глобальная стратегия с уникальной боевой системой и тысячами игроков, которые могут стать как вашими заклятыми врагами, так и ближайшими союзниками. Очередная война? Нет. ЭТО... ЭПОХА... СПАРТЫ!!!</description>

</product>

<product id="5">
    <title>Гадкий Я</title>
    <icon>https://lh3.googleusercontent.com/uzfSYFAWHny1yw3sXcDyjnqZfUeOTiY3yAHhBD33xH7rj3Swz1XYYXhfkrZVHAOsf6U=w300-rw</icon>
    <screenshots>
        <image>https://lh3.googleusercontent.com/bf1UthQFmm0Ok6wXiVQJMlZKkdagFtTXZDvianvQSwOaHEFkx6AKCI-nyQXZT1CHhVdj=h900-rw</image>
        <image>https://lh3.googleusercontent.com/P3-OwdiWoMHG8BNXZ4srZklyhoDVQDN4U1bBAf8tIU1UtFMF4jKfRsYgwqxgQmSjxyE=h900-rw</image>
        <image>https://lh3.googleusercontent.com/pepiqsyXxulYiYzY4OuDg4AdDBYA1ZpEr02xU3U3Mv_ZR4HBLGsMHpM5rw0KUO0hBYs=h900-rw</image>
        <image>https://lh4.ggpht.com/MQZx80iHmep7i_MLaP88SHyGRGH0GX_PbMmzdbShHQKA1Hnhy9ZvQkYwASBqBiDStjl3=h900-rw</image>
    </screenshots>
    <short_description>Гадкий Я: Minion Rush сверкает еще более гадкими красками! </short_description>
    <description>ВСЕ ЛУЧШЕЕ - ДЛЯ ФАНАТОВ “ГАДКИЙ Я’’ Дурачьтесь вместе с миньонами! Сотни заданий потребуют от вас невероятной подлости! Бегите по запомнившимся по мультфильму “Гадкий Я” местам: Лаборатория Грю, Жилмассив Грю, Логово Эль-Мачо, Пляж Миньонов, Дуракаваляндия и другим! </description>

</product>

<product id="6">
    <title>LEGO STAR WARS</title>
    <icon>https://lh5.ggpht.com/UuVLVS57rHrMw-qvqOuaPMzhQT4FB07_86-J4fYuxY1B0JXO-p6X1iBsZbfeO5C2yy4=w300-rw</icon>
    <screenshots>
        <image>https://lh5.ggpht.com/kLzOXEw_6-1rU-RWmGA2kZ4YUx5GFUJ7v5unaVksj_rNA1nJdxEyOSHAEeMpDdEaXKk=h900-rw</image>
        <image>https://lh6.ggpht.com/cJYtZN_eQDnsw5UOwcS374moZkKxCG4NYwjbIutGdpR1tiAK0jDfR-fjUYgNV9GU=h900-rw</image>
        <image>https://lh3.ggpht.com/MCl0vCXdLomFOLBGr-fnn1nomZRANle3WbtZdyzblCfU1L92ILCyuROks_oEGBDEgg=h900-rw</image>
        <image>https://lh5.ggpht.com/LkeE1ulpYS4KmlUsWfAzC5O8pvB0rMtYTJRnewfcEeh1qcXLIoYLEurpGEjBVkTYqavz=h900-rw</image>
    </screenshots>
    <short_description>БОЛЬШОЕ ОБНОВЛЕНИЕ: ДВЕ НОВЫЕ ПЛАНЕТЫ ПОЛНЫЕ ЭКШЕНА, ЭПИЧЕСКИХ КОСМИЧЕСКИХ СРАЖЕНИЙ И ПРОЧЕГО</short_description>
    <description>Строй, создавай и управляй своими любимыми персонажами и транспортными средствами для уничтожения твоих врагов, решай головоломки и проходи испытания в мире вселенной LEGO Star Wars</description>

</product>

我想要的只是解析这个 damт xml 并创建 Product 实体...... 请帮我 !

【问题讨论】:

  • 我相信 XML 中只允许有一个根元素。 &lt;product-list&gt; 是干什么用的?
  • 产品在产品列表中,我想,,,你能添加你的 xml 的结尾吗...?
  • 有不好意思没写
  • 不应该进入res/xml。我会把它放在raw,或assets
  • 对于原始文件,还有另一个函数..它们的结果是一样的..但可能是我弄错了......

标签: java android xml parsing


【解决方案1】:

我已经重新制作了所有这些方法。 我按照这里所说的做了-https://developer.android.com/training/basics/network-ops/xml.html

为什么我没有早点做到……

我不知道我上面的变体有什么问题,但是在阅读了不同的手册之后,我决定 dataParser.next() 和 dataParser.nextTag() 是非常不同的,并且不使用 dataParser.nextTag() 会导致所有问题。

因为解析器试图获取标签的nage,但它仍在START_DOCUMENT中,并且没有任何标签......这导致了NullPointerExeption。

再一次 - 我不知道这是否正确,但这是我唯一得到的,经过长时间的阅读和冲浪......

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-04-24
    • 2013-08-11
    • 1970-01-01
    • 1970-01-01
    • 2020-04-05
    • 1970-01-01
    • 1970-01-01
    • 2013-11-06
    相关资源
    最近更新 更多