Android XMLPullParser嵌套具有相同名称的属性

时间:2019-04-19 12:00:12

标签: android xml parsing xmlpullparser

我正在将XML文件解析为类的实例。单个项目如下所示:

<item>
  <g:id>xx</g:id>
  <title>xxx</title>
  <description>xxx</description>
  <g:product_type>xxx</g:product_type>
  <link>xx</link>
  <g:image_link>xxx</g:image_link>
  <g:condition>xxx</g:condition>
  <g:availability>xxx</g:availability>
  <g:price>100</g:price>
  <g:brand>xxx</g:brand>
  <g:gtin/>
  <g:mpn>xx</g:mpn>
  <g:shipping>
    <g:country>xx</g:country>
    <g:service>xx</g:service>
    <g:price>10</g:price>
  </g:shipping>
  <pubDate>xxx</pubDate>
</item>

解析方法:

if (xpp.getName().equalsIgnoreCase("item")) {
                        insideItem = true;
                        i = new Item();

                    } else if (xpp.getName().equalsIgnoreCase("g:id")) {
                        if (insideItem)
                            i.setmID(xpp.nextText());
                    } else if (xpp.getName().equalsIgnoreCase("title")) {
                        if (insideItem)
                            i.setmTitle(xpp.nextText());
                    } else if (xpp.getName().equalsIgnoreCase("description")) {
                        if (insideItem)
                            i.setmDescription(xpp.nextText());
                    } else if (xpp.getName().equalsIgnoreCase("g:product_type")) {
                        if (insideItem)
                            i.setmProductType(xpp.nextText());
                    } else if (xpp.getName().equalsIgnoreCase("g:image_link")) {
                        if (insideItem)
                            i.setmPictureLink(xpp.nextText());
                    } else if (xpp.getName().equalsIgnoreCase("g:condition")) {
                        if (insideItem)
                            i.setmCondition(xpp.nextText());
                    } else if (xpp.getName().equalsIgnoreCase("g:availability")) {
                        if (insideItem)
                            i.setmAvailability(xpp.nextText());
                    } else if (xpp.getName().equalsIgnoreCase("g:price")) {
                        if (insideItem)
                            i.setmPrice(xpp.nextText());
                    } else if (xpp.getName().equalsIgnoreCase("g:brand")) {
                        if (insideItem)
                            i.setmBrand(xpp.nextText());
                    } else if (xpp.getName().equalsIgnoreCase("g:mpn")) {
                        if (insideItem)
                            i.setmMpn(xpp.nextText());
                    } else if (xpp.getName().equalsIgnoreCase("g:country")) {
                        if (insideItem)
                            i.setmShippingCountry(xpp.nextText());
                    } else if (xpp.getName().equalsIgnoreCase("g:service")) {
                        if (insideItem)
                            i.setmService(xpp.nextText());
                    } else if (xpp.getName().equalsIgnoreCase("g:price")) {
                        if (insideItem)
                            i.setmShippingCosts(xpp.nextText());
                    } else if (xpp.getName().equalsIgnoreCase("g:pubDate")) {
                        if (insideItem)
                            i.setMpubDate(xpp.nextText());
                    }

我将XML文件的每个属性解析为该类的一个字段。但是,在解析属性“ g:price”时,我遇到了一些麻烦。我知道这是因为我有两个具有相同名称的属性。

什么是区分项目价格和价格的合适方法? 有人可以为我提供如何更改方法的想法吗?

请注意,我知道使用switch语句会更有效,只是想获得xml的经验。

0 个答案:

没有答案