所以过去几天我一直在玩Sax,而且我已经完全无法处理这个问题。
假设我有以下xml
<PowerSystemRegions>
<PowerSystemRegion>
<RegionId>1</RegionId>
<RegionName>New England</RegionName>
<Status>Normal</Status>
<DateUpdated>2011-12-22T10:55:51.000-05:00</DateUpdated>
</PowerSystemRegion>
<PowerSystemRegion>
我想首先检查以确保区域名称是New England,然后根据该状态拉出状态,但我不认为它会加载下一个qName或任何东西,因为它会再次调用主
这是我到目前为止所拥有的,但我完全被卡住了:
public void startElement (String uri, String name, String qName, Attributes atts) {
boolean region = false;
boolean regionName = false;
boolean regionStatus = false;
if (qName.compareTo("RegionName") == 0) {
region = true;
if(atts.getValue(0).compareTo("New England") == 0){
}
if (currentStatus == null){
String cCond = atts.getValue(0);
currentStatus = cCond;
}
}
}
我的想法是比较名称,一旦设置了所有3个布尔值,我就没事了......但是后来我觉得由于字符串中只有一个qName而无法正常工作。哈尔普?
答案 0 :(得分:0)
我和萨克斯一起工作已经有一段时间,但我会尝试: 您可以添加处理程序字段,如:
public class SaxHandler {
Integer regionId;
String regionName;
String regionStatus;
(...)
}
所以,在你的start元素中,你可以创建类似的东西:
public void startElement (String uri, String name, String qName, Attributes atts) {
if (qname.equals("RegionName") {
regionName = atts.getValue(0);
}
if (qname.equals("RegionId") {
regionId = Integer.parseInt(atts.getValue(0));
}
if (qname.equals ("Status") {
if(regionName.equals ("New England")) {
//Do what you want here
}
}
}
顺便说一句,它的使用等于而不是compareTo。只有在对元素进行排序时才使用compareTo;)
编辑:在对象中思考,更好地使用类,而不是像我一样使用类。使用PowerSystem对象从xml收集数据;)