1

xml 経由で ebay api にアクセスしてアイテムを検索するアプリを作成しています。ガイド Android 開発者ガイド XMLPullParser に従ってプル パーサーを使用しましたが、基本的な xml をうまく解析できました。しかし、リンクにもプルパーサーサイトにも記載されていない形式のアイテムにアクセスしようとしているため、プルパーサーに関する十分な情報がありません。

製品アイテムはアイテム配列にあります。最初のアイテムが返された後にパーサーを実行しようとすると、パーサーはアイテムごとにループするのではなく、アイテム配列レベルに戻ります。これにより、パーサーが xml 全体で実行され、1 つのアイテムのみが返されます。数日間試した後、パーサーが Item Array レベルに戻るのを妨げているものは何もありませんでした。

これは XML の構造です。

     <FindPopularItemsResponse>
     <Timestamp>2013-04-08T18:30:44.139Z</Timestamp>
    <Ack>Success</Ack>
    <Build>E817_CORE_APILW2_15902151_R1</Build>
    <Version>817</Version>
    <ItemArray>
     <ItemID>330624952975</ItemID><EndTime>2013-05-03T13:31:06.000Z</EndTime> 
      <ViewItemURLForNaturalSearch></ViewItemURLForNaturalSearch>
       <ListingType>FixedPriceItem</ListingType><GalleryURL></GalleryURL>
        <PrimaryCategoryID>73522</PrimaryCategoryID><PrimaryCategoryName>  
        </PrimaryCategoryName><BidCount>706</BidCount><ConvertedCurrentPrice 
         currencyID="USD">14.95</ConvertedCurrentPrice>
        <ListingStatus>Active</ListingStatus><TimeLeft>P24DT19H22S</TimeLeft>
        <Title>    </Title>
    </ItemArray>
    </FindPopularItemsResponse>

ありがとう

ルーク

4

3 に答える 3

0

コードがなければ、これは実際には答えるのが難しいものです。

ループ構造はおそらく次のようになります。

while (eventType != XmlPullParser.END_DOCUMENT) {
    switch (eventType) {
    case XmlPullParser.START_TAG:
        if (xpp.getName().compareTo("ItemID") == 0) { // new item found
            // handle the whole item here if the format is static
        }
        // other stuff
        break;
    case XmlPullParser.END_TAG:
        // TODO
        break;
    case XmlPullParser.TEXT:
        // TODO
        break;
    }
于 2013-04-08T19:46:52.117 に答える
0

指定した xml には項目が 1 つしかありません。例に複数の項目がないと、正しく答えるのが本当に難しくなります。しかし、ItemID だけを試してみます。ItemID のリストを作成し、そのノードのテキストをヒットすると、新しい ItemID がリストに追加されます。

オブジェクトのリストを作成し、現在のノードを追跡します

List<ItemID> bdxr = new ArrayList<ItemID>();

...

String N = "";  // I know it's upper case but its one character and important

...

if (eventType == XmlPullParser.START_TAG) {
    N = xpp.getName(); // current node

...


} else if (eventType == XmlPullParser.TEXT) {
if (N.equals("ItemID")) {
        // create an ItemID Object and add the text to it
        bdxr.add(new ItemID(xpp.getText()); 

...


} else if (eventType == XmlPullParser.END_TAG) {
    N = ""; // no current node.

単純な xpp ループのリストに項目を追加して頑張ってください

于 2013-08-30T17:54:30.733 に答える