2

データベースソフトウェアからエクスポートしたXMLファイルをAndroidアプリ用に解析したいと思います。ただし、一部のタグには次のような引数があります。

<row>
<value column="Index" null="false">1</value>
<value column="Front" null="false">INFO</value>
<value column="Back" null="false">INFO</value>
<value column="Check" null="false">0</value>
</row>

解析する開始タグを見つけようとしているときに、どの文字列値を指定しますか?(例:行を見つけるには、開始タップを「行」と比較し、trueが返された場合は、データを計算します。インデックス、フロント、バック、チェックなどの各値に対して個別に何をしますか?)

私のJavaコードは次のとおりです

   try{ 
    XmlPullParserFactory factory = XmlPullParserFactory.newInstance();
    factory.setNamespaceAware(true);
    XmlPullParser xpp = factory.newPullParser();

    InputStream stream = context.getResources().openRawResource(com.Whydea.chemistryhelper.R.raw.appxml);
    xpp.setInput(stream, null);

    int eventType = xpp.getEventType();
    while (eventType != XmlPullParser.END_DOCUMENT){
        if(eventType==XmlPullParser.START_TAG){
            handleStartTag(xpp.getName());  //handels Start Tag
        } else if (eventType==XmlPullParser.END_TAG){
            handleEndTag(xpp.getName());
            Ctag=null;
        } else if (eventType==XmlPullParser.TEXT){
            handleText(xpp.getText());
        }
        eventType=xpp.next();
    }

    }catch (NotFoundException e){
        Log.d("XMLpp",e.getMessage());          
    }catch (XmlPullParserException e){
        Log.d("XMLpp",e.getMessage());
    }catch (IOException e){
        Log.d("XMLpp",e.getMessage());
    }    

`

編集:

各「値」開始タグには独自の属性(列= ...)がありますが、それらにアクセスするにはどうすればよいですか?

例:行にアクセスするには、値が「row」の文字列定数を使用し、開始タグがそれに対応しているかどうかを確認します。これで機能します。しかし、値が "value column = \" Check \ "null = \" false \ ""で文字列定数を宣言すると(\を使用する必要があります。それ以外の場合は "エラーが発生します)、その開始タグが見つかりません。私の定数はすべきですか?

4

3 に答える 3

1

私があなたの質問を正しく理解しているなら、あなたが従う必要があるそれぞれの値を取得するために、基本的にあなたはxmlタグ内の各属性の値を取得したいです

          int attributeCount = xpp.getAttributeCount();
        for(int i = 0; i<attributeCount; i++){
            String name = xpp.getAttributeName(i);
            //Log.d(TAG, "Name: "+name);
            if(name != null && name.equalsIgnoreCase("column")){

                return Integer.parseInt(xpp.getAttributeValue(i));                
            }
        }

したがって、行に遭遇したら、それを見つけたら開始タグの「値」を探し、上記のコードを使用して属性の個々の値を取得します。

コメントによると、XMLタグのテキスト値を取得する場合は、getText()メソッドを使用する必要があります。START_TAG値を見つけたら、以下のコードを実行します。

                    eventType = xpp.next();
                    if(eventType == XmlPullParser.TEXT){
                        String text = xpp.getText();                              
                    }

xmlタグの「INFO」値の場合は「INFO」を返します

于 2013-03-26T10:43:27.153 に答える
1
    try {
        final Service S = new Service();
        String xmlString = S.ImportAllPollBoothStatus(IMEI,asscd, boothno);
        if(xmlString.toLowerCase().trim().equals("false")){
            return false;
        }
        DocumentBuilderFactory docFactory = DocumentBuilderFactory
                .newInstance();
        DocumentBuilder docBuilder = docFactory.newDocumentBuilder();
        InputSource is = new InputSource();
        is.setCharacterStream(new StringReader(xmlString));
        Document doc = docBuilder.parse(is);

        NodeList nodes = doc.getElementsByTagName("HT");

        for (int i = 0; i < nodes.getLength(); i++) {

            Element element = (Element) nodes.item(i);
            NodeList blockidnodes = doc.getElementsByTagName("Table");

            for (int blockidcount = 0; blockidcount < blockidnodes
                    .getLength(); blockidcount++) {

                NodeList PollpercentId = element
                        .getElementsByTagName("PollpercentId");
                Element line1 = (Element) PollpercentId.item(blockidcount);

                NodeList asscd1 = element
                        .getElementsByTagName("asscd");
                Element line2 = (Element) asscd1.item(blockidcount);

                NodeList pollgcd = element
                        .getElementsByTagName("pollgcd");
                Element line3 = (Element) pollgcd.item(blockidcount);


                NodeList SessionYearIdref = element
                        .getElementsByTagName("SessionYearIdref");
                Element line4 = (Element) SessionYearIdref.item(blockidcount);

                NodeList MaleVoters = element
                        .getElementsByTagName("MaleVoters");
                Element line5 = (Element) MaleVoters.item(blockidcount);

                NodeList FemaleVoters = element
                        .getElementsByTagName("FemaleVoters");
                Element line6 = (Element) FemaleVoters.item(blockidcount);

                NodeList UpdatedDate = element
                        .getElementsByTagName("UpdatedDate");
                Element line7 = (Element) UpdatedDate.item(blockidcount);

                NodeList timeslot = element
                        .getElementsByTagName("timeslot");
                Element line8 = (Element) timeslot.item(blockidcount);


            this.db.insertVotingStatus(
                        getCharacterDataFromElement(line1),
                        getCharacterDataFromElement(line2),
                        getCharacterDataFromElement(line3),
                        getCharacterDataFromElement(line4),
                        getCharacterDataFromElement(line5),
                        getCharacterDataFromElement(line6),
                        getCharacterDataFromElement(line7),
                        getCharacterDataFromElement(line8));

            }
        }


    }
     catch (Exception e) {
        Log.e("EXCEPTION DURING VIDHANSABHA INSERION",
                "======Insert-VIDHANSABHA-DETAILS=====================" + e);
        return false;
    }
    return true;
于 2013-12-05T10:24:25.543 に答える
0

XMLファイルを生成するアプリを開発しましたか?もしそうなら、なぜあなたはそれを変えないのですか?次の形式のXMLを使用すると、XMLの解析がはるかに簡単になります。

<item Index="1" Front="INFO" Back="INFO" Check="0"/>
<item Index="2" Front="INFO" Back="INFO" Check="1"/>
于 2013-03-26T10:47:32.677 に答える