Java Xmlpullparser解析嵌套项
我正在制作一个应用程序,可以通过xml访问ebay api来搜索物品。我遵循了使用Pull解析器的指南,能够很好地解析基本xml。但是对于我的需要,没有足够的关于pullparser的信息,因为我试图以链接和pullparser站点中都没有提到的格式访问项目 产品项位于项数组中。在返回第一个项目后尝试运行解析器时,解析器将返回到项目数组级别,而不是针对每个项目循环。这导致解析器在整个xml中运行,并且只返回一项。在尝试了几天之后,我没有尝试任何东西阻止解析器返回到项数组级别 这是XML的结构Java Xmlpullparser解析嵌套项,java,android,xml-parsing,xsd,xmlpullparser,Java,Android,Xml Parsing,Xsd,Xmlpullparser,我正在制作一个应用程序,可以通过xml访问ebay api来搜索物品。我遵循了使用Pull解析器的指南,能够很好地解析基本xml。但是对于我的需要,没有足够的关于pullparser的信息,因为我试图以链接和pullparser站点中都没有提到的格式访问项目 产品项位于项数组中。在返回第一个项目后尝试运行解析器时,解析器将返回到项目数组级别,而不是针对每个项目循环。这导致解析器在整个xml中运行,并且只返回一项。在尝试了几天之后,我没有尝试任何东西阻止解析器返回到项数组级别 这是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>
谢谢
卢克没有任何密码,这个问题实际上很难回答 您的循环结构可能如下所示:
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;
}
您提供的xml中只有一项。如果示例中没有多个项目,则很难正确回答。但我会尽量只获取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循环中将项目添加到列表中,祝您好运。您还没有完全指定要从xml中提取哪些数据,因此……假设您想要从每个标记中提取数据,下面是我的做法
int eventType = parser.getEventType();
while (eventType != XmlPullParser.END_DOCUMENT) {
String name;
String itemID, endTime, viewItemURLForNaturalSearch, listingType;
switch (eventType) {
case XmlPullParser.START_DOCUMENT:
Log.d("Ebay ", " Start of Document");
break;
//look for the starting tag "item array" in the xml
case XmlPullParser.START_TAG:
name = parser.getName();
if(name.equalsIgnoreCase("ItemArray")) {
/*to handle nested tags.
"parser.nextTag()" goes to the next starting tag immediately following "ItemArray",
and "itemID = parser.nextText()" assigns the text within that tag
to the string itemID*/
parser.nextTag();
itemID = parser.nextText();
Log.d("Listing ", itemID);
parser.nextTag();
endTime = parser.nextText();
Log.d("Listing ", endTime);
parser.nextTag();
viewItemURLForNaturalSearch = parser.nextText();
Log.d("Listing ", viewItemURLForNaturalSearch);
parser.nextTag();
listingType = parser.nextText();
Log.d("Listing ", listingType);
}
break;
}
eventType = parser.next();
}
希望这能有所帮助。您好,如果不清楚,我很抱歉,但我没有发布代码,因为它实际上与此处使用的代码相同:我不希望我的帖子无缘无故包含重复的代码,我正在进行更改,如果它不起作用,我将进行恢复。我会尝试一下,但我想我尝试了一些类似的方法,我想可能也失败了。我还想尝试下一步而不是下一步来处理条目?