Java 撒克逊人';不解析整个xml文件
我正在使用SAXParser来解析xml文件。但是,我的应用程序只解析xml文件中的前3项,而忽略其余项。下面是我的代码和我尝试解析的xml文件: 主要活动:Java 撒克逊人';不解析整个xml文件,java,android,xml,xml-parsing,saxparser,Java,Android,Xml,Xml Parsing,Saxparser,我正在使用SAXParser来解析xml文件。但是,我的应用程序只解析xml文件中的前3项,而忽略其余项。下面是我的代码和我尝试解析的xml文件: 主要活动: public class XMLParsingExample extends Activity { /** Create Object For Bar Class */ Bar barList = null; /** Called when the activity is first created. */
public class XMLParsingExample extends Activity {
/** Create Object For Bar Class */
Bar barList = null;
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
/** Create a new layout to display the view */
LinearLayout layout = new LinearLayout(this);
layout.setOrientation(1);
/** Create a new textview array to display the results */
TextView colour[];
TextView division[];
TextView rect[];
try {
/** Handling XML */
String path = Environment.getExternalStorageDirectory().getAbsolutePath() + "/saveObject/new.xml";
File file = new File(path);
SAXParserFactory parserFactory=SAXParserFactory.newInstance();
SAXParser saxParser=parserFactory.newSAXParser();
XMLReader reader=saxParser.getXMLReader();
MyXMLHandler myXMLHandler = new MyXMLHandler();
reader.setContentHandler(myXMLHandler);
reader.parse(new InputSource(new FileInputStream(file)));
} catch (Exception e) {
System.out.println("XML Pasing Excpetion = " + e);
}
/** Get result from MyXMLHandler Bar Object */
barList = MyXMLHandler.barList;
/** Assign textview array lenght by arraylist size */
colour = new TextView[barList.getColour().size()];
division = new TextView[barList.getDivision().size()];
rect = new TextView[barList.getRect().size()];
/** Set the result text in textview and add it to layout */
for (int i = 0; i < barList.getRect().size(); i++) {
colour[i] = new TextView(this);
colour[i].setText("Colour = "+barList.getColour().get(i));
division[i] = new TextView(this);
division[i].setText("Division = "+barList.getDivision().get(i));
rect[i] = new TextView(this);
rect[i].setText("Rect = "+barList.getRect().get(i));
layout.addView(colour[i]);
layout.addView(division[i]);
layout.addView(rect[i]);
}
/** Set the layout view to display */
setContentView(layout);
}
}
酒吧级别
public class Bar {
/** Variables */
private ArrayList<String> colour = new ArrayList<String>();
private ArrayList<String> division = new ArrayList<String>();
private ArrayList<String> rect = new ArrayList<String>();
/** In Setter method default it will return arraylist
* change that to add */
public ArrayList<String> getColour() {
return colour;
}
public void setColour(String name) {
this.colour.add(name);
}
public ArrayList<String> getDivision() {
return division;
}
public void setDivision(String division) {
this.division.add(division);
}
public ArrayList<String> getRect() {
return rect;
}
public void setRect(String rect) {
this.rect.add(rect);
}
}
公共类栏{
/**变数*/
private ArrayList color=new ArrayList();
private ArrayList division=new ArrayList();
private ArrayList rect=new ArrayList();
/**在Setter方法默认值中,它将返回arraylist
*将其更改为添加*/
公共阵列列表getcolor(){
返色;
}
公共void setcolor(字符串名称){
此。颜色。添加(名称);
}
公共阵列列表getDivision(){
回返司;
}
公共无效集除法(字符串除法){
本.division.add(division);
}
公共数组列表getRect(){
返回矩形;
}
公共void setRect(字符串rect){
this.rect.add(rect);
}
}
要分析的XML文件:
<?xml version='1.0' encoding='UTF-8' standalone='yes' ?>
<bar>
<colour>Blue</colour>
<division>8898</division>
<rect>33</rect>
</bar>
<bar>
<colour>Red</colour>
<division>65</division>
<rect>6876</rect>
</bar>
<bar>
<colour>Black</colour>
<division>65</division>
<rect>6876</rect>
</bar>
<bar>
<colour>Yellow</colour>
<division>65</division>
<rect>6876</rect>
</bar>
<bar>
<colour>Red</colour>
<division>65</division>
<rect>6876</rect>
</bar>
蓝色
8898
33
红色
65
6876
黑色
65
6876
黄色的
65
6876
红色
65
6876
有人知道我哪里出错了吗?每次创建新的酒吧实例时,都会丢失旧的酒吧实例。 如果试图存储一组Bar实例,请按如下方式更改Bar类:
public class Bar {
private String colour;
private String division;
private String rect;
public void setColor(String color) {
this.color = color;
}
//other setters & getters...
}
在MyXmlHandler中,有一个列表和一个当前栏:
public List<Bar> barList = new ArrayList<Bar>();
private Bar currentBar;
在endElement事件处理程序中
if (localName.equalsIgnoreCase("colour"))
currentBar.setColour(currentValue);
else if (localName.equalsIgnoreCase("division"))
currentBar.setDivision(currentValue);
else if (localName.equalsIgnoreCase("rect"))
currentBar.setRect(currentValue);
虽然我还没有测试过,但这应该可以做到。你真的发布了整个xml吗?你存储颜色、除法和矩形的集合而不是存储条的集合有什么特别的原因吗?是的,这就是整个xml。我正在尝试存储具有上述属性的条的集合。我做得不对吗?您的xml缺少一个根元素。@Davecm-我不会像您现在这样做,它不是特别面向对象的。有关更好的方法,请参见下面的答案。
if (localName.equals("bar"))
{
/** Start */
currentBar = new Bar();
barList.add(currentBar);
}
if (localName.equalsIgnoreCase("colour"))
currentBar.setColour(currentValue);
else if (localName.equalsIgnoreCase("division"))
currentBar.setDivision(currentValue);
else if (localName.equalsIgnoreCase("rect"))
currentBar.setRect(currentValue);