简体   繁体   English

Android XML Reader读取一次

[英]Android XML Reader Reads Once

i just tried to make a XML Reader but i had some troubles. 我只是想制作一个XML Reader,但遇到了一些麻烦。 When I parse the XML file it says there is just one tag and read just this one. 当我解析XML文件时,它说只有一个标签,并且只能读取这个标签。 But there is more than one. 但是不止一个。 Here is my code: 这是我的代码:

    @Override
    protected Void doInBackground(Void... voids) {

        try {
            URL url = new URL(QuizActivity.fileUrl);
            DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
            DocumentBuilder builder = factory.newDocumentBuilder();

            Document document = builder.parse(new InputSource(url.openStream()));
            document.getDocumentElement().normalize();

            NodeList sorular = document.getElementsByTagName("sorular");
            Log.d("Soru Sayısı", String.valueOf(sorular.getLength()));
            for(int i = 0; i < sorular.getLength(); i++){
                Node sorularNode = sorular.item(i);
                Element sorularElement = (Element) sorularNode;

                NodeList siraNodeList = document.getElementsByTagName("sira");
                Element siraElement = (Element) siraNodeList.item(i);

                NodeList textNodeList = document.getElementsByTagName("text");
                Element textElement = (Element) textNodeList.item(i);

                NodeList aNodeList = document.getElementsByTagName("a");
                Element aElement = (Element) aNodeList.item(i);

                NodeList bNodeList = document.getElementsByTagName("b");
                Element bElement = (Element) bNodeList.item(i);

                NodeList cNodeList = document.getElementsByTagName("c");
                Element cElement = (Element) cNodeList.item(i);

                NodeList dNodeList = document.getElementsByTagName("d");
                Element dElement = (Element) dNodeList.item(i);

                NodeList eNodeList = document.getElementsByTagName("e");
                Element eElement = (Element) eNodeList.item(i);

                NodeList dogruNodeList = document.getElementsByTagName("dogru");
                Element dogruElement = (Element) dogruNodeList.item(i);

                int sira = Integer.parseInt(siraElement.getChildNodes().item(i).getNodeValue());

                SinavActivity.soruText.put(sira, textElement.getChildNodes().item(i).getNodeValue());
                SinavActivity.cevap_a.put(sira, aElement.getChildNodes().item(i).getNodeValue());
                SinavActivity.cevap_b.put(sira, bElement.getChildNodes().item(i).getNodeValue());
                SinavActivity.cevap_c.put(sira, cElement.getChildNodes().item(i).getNodeValue());
                SinavActivity.cevap_d.put(sira, dElement.getChildNodes().item(i).getNodeValue());
                SinavActivity.cevap_e.put(sira, eElement.getChildNodes().item(i).getNodeValue());
                SinavActivity.dogruCevap.put(sira, dogruElement.getChildNodes().item(i).getNodeValue().trim());

            }

        } catch (MalformedURLException e) {
            e.printStackTrace();
        } catch (ParserConfigurationException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        } catch (SAXException e) {
            e.printStackTrace();
        }
        return null;
    }

XML File: XML档案:

<?xml version="1.0" encoding="utf-8"?>
<sorular>
<Matematik>
    <soru>
        <sira>1</sira>
        <text>Bir sınıftaki öğrencilerin % 40 ı kız öğrencidir. Kız öğrencilerin % 90 ı, erkek öğrencilerin %80 matematik dersinden başarılıdır. Buna göre, bu sınıfın matematik dersinden başarısı yüzde kaçtır?</text>
        <a>84</a>
        <b>46</b>
        <c>20</c>
        <d>12</d>
        <e>50</e>
        <dogru>A</dogru>
    </soru>
    <soru>
        <sira>2</sira>
        <text>A ve B boş olmayan 2 kümedir 2.s(A)=3.s(B)= 5.s(A ∩ B) olduğuna göre s(A-B) en az kaçtır?</text>
        <a>8</a>
        <b>10</b>
        <c>2</c>
        <d>9</d>
        <e>12</e>
        <dogru>D</dogru>
    </soru>
</Matematik>

If I write NodeList sorular = document.getElementsByTagName("sorular"); 如果我写NodeList sorular = document.getElementsByTagName("sorular"); it says count of NodeList = 1 but if I write NodeList sorular = document.getElementsByTagName("soru"); 它说NodeList = 1计数NodeList = 1但是如果我写NodeList sorular = document.getElementsByTagName("soru"); it says the count = 2 but it gives me a NullPointerException 它说count = 2但它给了我一个NullPointerException

because siraElement.getChildNodes().getLength() will always return 1 element so when 因为siraElement.getChildNodes().getLength()将始终返回1元素,所以当

siraElement.getChildNodes().item(i).getNodeValue() //i=0

so the first node will be at 0 index but when i=1 then will be no Node at index 1 因此第一个节点将在0索引,但是当i=1然后将没有Node在索引1

siraElement.getChildNodes().item(i).getNodeValue() //i=1  error

so you can fetch the always from 0 index 这样就可以从0索引中获取Always

 int sira = Integer.parseInt(siraElement.getChildNodes().item(0).getNodeValue());
//                                                           ^^

plus do the same for all values like below 加上对所有如下所示的值执行相同操作

textElement.getChildNodes().item(0).getNodeValue()
...
dogruElement.getChildNodes().item(0).getNodeValue().trim()

As Pavneet_Singh said I edited and here is the code: 正如Pavneet_Singh所说,我进行了编辑,这是代码:

    @Override
    protected Void doInBackground(Void... voids) {

        try {
            URL url = new URL(QuizActivity.fileUrl);
            DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
            DocumentBuilder builder = factory.newDocumentBuilder();

            Document document = builder.parse(new InputSource(url.openStream()));
            Element rootElement = document.getDocumentElement();

            NodeList sorular = rootElement.getElementsByTagName("soru");
            for(int i = 0; i < sorular.getLength(); i++){
                Node soru = sorular.item(i);
                Element soruElement = (Element) soru;
                String siraText = soruElement.getElementsByTagName("sira").item(0).getTextContent();
                String text = soruElement.getElementsByTagName("text").item(0).getTextContent();
                String a = soruElement.getElementsByTagName("a").item(0).getTextContent();
                String b = soruElement.getElementsByTagName("b").item(0).getTextContent();
                String c = soruElement.getElementsByTagName("c").item(0).getTextContent();
                String d = soruElement.getElementsByTagName("d").item(0).getTextContent();
                String e = soruElement.getElementsByTagName("e").item(0).getTextContent();
                String dogru = soruElement.getElementsByTagName("dogru").item(0).getTextContent();

                int sira = Integer.parseInt(siraText);
                SinavActivity.soruText.put(sira, text);
                SinavActivity.cevap_a.put(sira, a);
                SinavActivity.cevap_b.put(sira, b);
                SinavActivity.cevap_c.put(sira, c);
                SinavActivity.cevap_d.put(sira, d);
                SinavActivity.cevap_e.put(sira, e);
                SinavActivity.dogruCevap.put(sira, dogru);
            }

        } catch (MalformedURLException e) {
            e.printStackTrace();
        } catch (ParserConfigurationException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        } catch (SAXException e) {
            e.printStackTrace();
        }
        return null;
    }

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM