Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/196.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 撒克逊人';不解析整个xml文件_Java_Android_Xml_Xml Parsing_Saxparser - Fatal编程技术网

Java 撒克逊人';不解析整个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. */

我正在使用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. */
    @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);