У меня проблемы с синтаксическим анализом вывода XML из поиска продуктов Amazon с использованием SAX-анализатора. Я пытаюсь получить только заголовки и ссылки из XML. Когда я шагаю по коду, я никогда не захожу ни к одному из слушателей.
Это то, что я имею до сих пор:
public class AmazonFeedParser
{
public static List<AmazonItem> parse(final String url)
{
final AmazonItem currentItem = new AmazonItem();
final List<AmazonItem> returnItems = new ArrayList<AmazonItem>();
final RootElement root = new RootElement("ItemSearchResponse");
final Element items = root.getChild("Items");
final Element item = items.getChild("Item");
item.getChild("DetailPageURL").setEndTextElementListener(new EndTextElementListener()
{
public void end(final String body) {
currentItem.setLink(body);
}
});
final Element attributes = item.getChild("ItemAttributes");
attributes.getChild("Title").setEndTextElementListener(new EndTextElementListener()
{
public void end(final String body) {
currentItem.setTitle(body);
}
});
item.setEndElementListener(new EndElementListener()
{
public void end() {
returnItems.add(currentMessage.copy());
}
});
try
{
final InputStream stream = new URL(url).openConnection().getInputStream();
Xml.parse(stream, Xml.Encoding.UTF_8, root.getContentHandler());
stream.close();
}
catch (Exception e)
{
}
return returnItems;
}
}
Это XML, который я пытаюсь проанализировать:
<ItemSearchResponse>
<OperationRequest>
<HTTPHeaders></HTTPHeaders>
<RequestId>14BMDE9QG76M3Q9GG1XH</RequestId>
<Arguments></Arguments>
<RequestProcessingTime>0.34825611114502</RequestProcessingTime>
</OperationRequest>
<Items>
<Request>
</Request>
<TotalResults>88693</TotalResults>
<TotalPages>29570</TotalPages>
<SearchResultsMap></SearchResultsMap>
<Item>
<ASIN>B00004XSC5</ASIN>
<DetailPageURL>http://www.amazon.com/Taylor-1470-Digital-Cooking-Thermometer/dp/B00004XSC5%3FSubscriptionId%3DAKIAJI3JK6GP3HTDZNHQ%26tag%3Dfilt01-20%26linkCode%3Dxm2%26camp%3D2025%26creative%3D165953%26creativeASIN%3DB00004XSC5
</DetailPageURL>
<ItemLinks>
<Description>Technical Details</Description>
<URL>http://www.amazon.com/Taylor-1470-Digital-Cooking-Thermometer/dp/tech-data/B00004XSC5%3FSubscriptionId%3DAKIAJI3JK6GP3HTDZNHQ%26tag%3Dfilt01-20%26linkCode%3Dxm2%26camp%3D2025%26creative%3D386001%26creativeASIN%3DB00004XSC5
</URL>
</ItemLinks>
<ItemAttributes>
<Manufacturer>Taylor Thermometers</Manufacturer>
<ProductGroup>Kitchen</ProductGroup>
<Title>Taylor 1470 Digital Cooking Thermometer/Timer</Title>
</ItemAttributes>
</Item>
</Items>
</ItemSearchResponse>
РЕДАКТИРОВАТЬ: если это кому-нибудь поможет, мне нужно добавить пространство имен Amazon в код анализатора, например:
final RootElement root = new RootElement("http://webservices.amazon.com/AWSECommerceService/2009-03-31", "ItemSearchResponse");
final Element items = root.getChild("http://webservices.amazon.com/AWSECommerceService/2009-03-31", "Items");
final Element item = items.getChild("http://webservices.amazon.com/AWSECommerceService/2009-03-31", "Item");
item.getChild("http://webservices.amazon.com/AWSECommerceService/2009-03-31", "DetailPageURL").setEndTextElementListener(new EndTextElementListener()
{
public void end(final String body) {
currentMessage.setLink(body);
}
});