2011-07-29 12 views
0

Saxパーサーを使用してwebservicesのアンドロイドに小さなアプリケーションを作成しています。私のリンクは です(http://www.anddev.org/images/tut/basic/parsingxml/example.xml)Iの値を表示できます** < ** innertag>、******)ここでtheTextViewで
の値を表示することExtractedString1のISN「を設定します。したがって、コード文字でブロック()関数)あなたはのstartElement(でコメントアウトthis.in_mytag = trueを持っている私のsorcsコードアンドロイドのsaxパーサーでタグを解析した後、エミュレータでnull値を表示しますか?

import org.xml.sax.Attributes; 

import org.xml.sax.SAXException; 

import org.xml.sax.helpers.DefaultHandler; 





public class ExampleHandler extends DefaultHandler{ 



     // =========================================================== 

     // Fields 

     // =========================================================== 



     private boolean in_outertag = false; 

     private boolean in_innertag = false; 

     private boolean in_mytag = false; 



     private ParsedExampleDataSet myParsedExampleDataSet = new ParsedExampleDataSet(); 



     // =========================================================== 

     // Getter & Setter 

     // =========================================================== 



     public ParsedExampleDataSet getParsedData() { 

       return this.myParsedExampleDataSet; 

     } 



     // =========================================================== 

     // Methods 

     // =========================================================== 

     @Override 

     public void startDocument() throws SAXException { 

       this.myParsedExampleDataSet = new ParsedExampleDataSet(); 

     } 



     @Override 

     public void endDocument() throws SAXException { 

       // Nothing to do 

     } 



     /** Gets be called on opening tags like: 

     * <tag> 

     * Can provide attribute(s), when xml was like: 

     * <tag attribute="attributeValue">*/ 

     @Override 

     public void startElement(String namespaceURI, String localName, 

         String qName, Attributes atts) throws SAXException { 

       if (localName.equals("outertag")) { 

         this.in_outertag = true; 

       }else if (localName.equals("innertag")) { 

         //this.in_innertag = true; 
        String attrValue = atts.getValue("sampleattribute"); 
        myParsedExampleDataSet.setExtractedString(attrValue); 

       }else if (localName.equals("mytag")) { 

         //this.in_mytag = true; 
        String attrValue = atts.getValue("mytag"); 
       myParsedExampleDataSet.setExtractedString1(attrValue); 

       }else if (localName.equals("tagwithnumber")) { 

         // Extract an Attribute 

         String attrValue = atts.getValue("thenumber"); 

         int i = Integer.parseInt(attrValue); 

         myParsedExampleDataSet.setExtractedInt(i); 

       } 

     } 



     /** Gets be called on closing tags like: 

     * </tag> */ 

     @Override 

     public void endElement(String namespaceURI, String localName, String qName) 

         throws SAXException { 

       if (localName.equals("outertag")) { 

         this.in_outertag = false; 

       }else if (localName.equals("innertag")) { 

         // this.in_innertag = false; 

       }else if (localName.equals("mytag")) { 

         //this.in_mytag = false; 

       }else if (localName.equals("tagwithnumber")) { 

         // Nothing to do here 

       } 

     } 



     /** Gets be called on the following structure: 

     * <tag>characters</tag> */ 

     @Override 

    public void characters(char ch[], int start, int length) { 

       if(this.in_mytag){ 

       myParsedExampleDataSet.setExtractedString1(new String(ch, start, length)); 

     } 

    } 

}![enter image description here][1] 

enter image description here

答えて

1

ですin_mytagがfalseなので実行中です。

mytagの開始を扱うときにもう1つのこと:String attrValue = atts.getValue("mytag");は不要です。これはcharacters()関数で処理する必要があります(私はあなたが単にデバッグの目的でそれを持っていたと考えています)。

+0

@ jasonまだ私はあなたが私に提案した変更を加えたので、それは動作しませんでした。 –

+0

見るべきことのカップル。 characters()関数も呼び出されていますか?たぶんLog.d()ステートメントを、文字と最後に見つかったタグのデータとともに入れてください。次に、新しいコードとLog.dの出力を使ってサンプルを編集します。 – Jason