我是在 android 中使用 SAX 解析器的新手。问题是,在我解析本地 xml 文件后,我想检查它是否包含带有 的值System.out.println
,但它返回 null。
所以,基本上如果我尝试ArrayList<PlaceEntry> pl = PlacesXMLHandler.places;
然后检查system.out.print(pl)
,它有一个空数组。我试图做同样的事情PlaceEntry
,它也给了我 null 。我猜我在创建 XMLHandler 时犯了一个错误,但我不确定在哪里。
我的xml:
<?xml version="1.0" encoding="utf-8"?>
<nodes>
<entry>
<title>My Title</title>
<description>Description</description>
<webpage>www.google.com</webpage>
<coordinates>
<latitude>100.00</latitude>
<longitude>100.00</longitude>
</coordinates>
</entry>
</nodes>
我的扩展处理程序类:
public class PlacesXMLHandler extends DefaultHandler
{
private Boolean currentElement = false;
private String currentValue = null;
public static PlaceEntry placeEntry = null;
public static ArrayList<PlaceEntry> places = null;
private String[] coord = null;
public static PlaceEntry getPlaceEntry()
{
return placeEntry;
}
public static void setSitesList(PlaceEntry placeEntry)
{
PlacesXMLHandler.placeEntry = placeEntry;
}
@Override
public void startElement(String uri, String localName, String qName,
Attributes attributes) throws SAXException
{
currentElement = true;
if (localName.equals("nodes"))
{
places = new ArrayList<PlaceEntry>();
}
else if (localName.equals("entry"))
{
placeEntry = new PlaceEntry();
places.add(placeEntry);
}
else if (localName.equals("coordinates"))
{
coord = new String[2];
}
}
@Override
public void endElement(String uri, String localName, String qName)
throws SAXException
{
currentElement = false;
if (localName.equalsIgnoreCase("title"))
placeEntry.setTitle(currentValue);
else if (localName.equalsIgnoreCase("description"))
placeEntry.setSubtitle(currentValue);
else if (localName.equalsIgnoreCase("webpage"))
placeEntry.setWebpage(currentValue);
else if (localName.equalsIgnoreCase("latitude"))
coord[0] = currentValue;
else if (localName.equalsIgnoreCase("longitude"))
coord[1] = currentValue;
if (!coord.equals(null))
placeEntry.setCoordinates(coord[0], coord[1]);
}
@Override
public void characters(char[] ch, int start, int length)
throws SAXException
{
if (currentElement)
{
currentValue = new String(ch, start, length);
currentElement = false;
}
}
}
我的 PlaceEntry 类:
public class PlaceEntry implements Serializable
{
public String title;
public String subtitle;
public String[] coord;
public String webpage;
public PlaceEntry()
{
setTitle(null);
setSubtitle(null);
setWebpage(null);
setCoordinates(null, null);
}
public void setTitle (String title)
{
this.title = title;
}
public String getTitle()
{
return title;
}
public void setSubtitle (String subtitle)
{
this.subtitle = subtitle;
}
public String getSubtitle ()
{
return subtitle;
}
public void setWebpage (String webpage)
{
this.webpage = webpage;
}
public String getWebpage ()
{
return webpage;
}
public void setCoordinates (String lat, String lng)
{
this.coord[0] = lat;
this.coord[1] = lng;
}
public String[] getCoordinates()
{
return coord;
}
}