5

Tôi gặp sự cố khi phân tích cú pháp XML của mình, tôi đã thử nhiều thứ.Tôi có thể phân tích cú pháp XML android bằng cách nào?

Tôi có xml như thế này.

<question id="1" text="Zodiac Sign" > 
    <option id="1" >Aries</option> 
    <option id="2" >Taurus</option> 
    <option id="3" >Gemini</option> 
    <option id="4" >Cancer</option> 
    <option id="5" >Leo</option> 
    <option id="6" >Virgo</option> 
    <option id="7" >Libra</option> 
    <option id="8" >Scarpio</option> 
    <option id="9" >Sagitarius</option> 
    <option id="10" >Capricorn</option> 
    <option id="11" >Acqauarius</option> 
</question><question id="2" text="Home Town" > 
</question><question id="3" text="Current Locaion" > 
</question><question id="4" text="Nationality" ></question> 
<question id="5" text="Height" ></question> 
<question id="6" text="Build(optional)" > 
    <option id="13" >Slim</option> 
    <option id="14" >Athletic</option> 
    <option id="15" >Few Pounds Extra</option> 
    <option id="16" >Obese</option> 
</question><question id="7" text="Hair Color" > 
</question><question id="8" text="Color Of Eyes" > 
    <option id="23" >Black</option> 
    <option id="24" >Brown</option> 
    <option id="25" >Blue</option> 
</question><question id="9" text="Smoking Habits" > 
</question> 

Tôi cần nhận câu hỏi và tôi muốn lưu chúng trong một mảng và sau đó có một số câu hỏi có tùy chọn như thẻ con, tôi muốn thêm các tùy chọn đó vào một mảng khác với tham chiếu đến id câu hỏi đó .

Làm cách nào để phân tích cú pháp xml này?

Tôi đã cố gắng để làm điều này bằng XMLPullParser

Đây là mã của tôi, nhưng nó không làm việc.

StringBuilder sb = new StringBuilder(); 
    int depth = 1; 
    while (depth != 0) { 
     switch (parser.next()) { 
     case XmlPullParser.END_TAG: 
      depth--; 
      if (depth > 0) { 
       sb.append("</" + parser.getName() + ">"); 
      } 
      break; 
     case XmlPullParser.START_TAG: 
      depth++; 
      StringBuilder attrs = new StringBuilder(); 
      for (int i = 0; i < parser.getAttributeCount(); i++) { 
       attrs.append(parser.getAttributeName(i) + "=\"" 
         + parser.getAttributeValue(i) + "\" "); 
      } 
      sb.append("<" + parser.getName() + " " + attrs.toString() + ">"); 
      break; 
     default: 
      sb.append(parser.getText()); 
      break; 
     } 
    } 
    payload = sb.toString(); 

Trả lời

1

Tôi đã tạo trình phân tích cú pháp của riêng mình để phân tích cú pháp xml này.

Đây là mã

public class ProfileHome extends Activity { 

    public String id=""; 
    public String text=""; 
    public ArrayList<String>option = new ArrayList<String>(); 
    public String singleoption=""; 

    List<Questions> q; 
    private Questions question = new Questions(); 
    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.profile_home); 
     String payload = "<question id=\"1\" text=\"Zodiac Sign\" ><option id=\"1\" >Aries</option><option id=\"2\" >Taurus</option><option id=\"3\" >Gemini</option><option id=\"4\" >Cancer</option><option id=\"5\" >Leo</option><option id=\"6\" >Virgo</option><option id=\"7\" >Libra</option><option id=\"8\" >Scarpio</option><option id=\"9\" >Sagitarius</option><option id=\"10\" >Capricorn</option><option id=\"11\" >Acqauarius</option></question><question id=\"2\" text=\"Home Town\" ></question><question id=\"3\" text=\"Current Locaion\" ></question><question id=\"4\" text=\"Nationality\" ></question><question id=\"5\" text=\"Height\" ></question><question id=\"6\" text=\"Build(optional)\" ><option id=\"13\" >Slim</option><option id=\"14\" >Athletic</option><option id=\"15\" >Few Pounds Extra</option><option id=\"16\" >Obese</option></question><question id=\"7\" text=\"Hair Color\" ></question><question id=\"8\" text=\"Color Of Eyes\" ><option id=\"23\" >Black</option><option id=\"24\" >Brown</option><option id=\"25\" >Blue</option></question><question id=\"9\" text=\"Smoking Habits\" ></question>"; 
     q = new ArrayList<Questions>(); 

     if(payload.contains("question")) 
      { 

       for(int i=0;i<payload.length();i++) 
        { 
        Questions ques = new Questions(); 
        // check if question has come 
         if(payload.substring(i, i+8).equals("question")) 
         { 
          i=i+9; 
          // check for the id, text and options 
          for(int k=i;k<payload.length();k++) 
          { 
           if(payload.substring(k, k+9).equals("/question")) 
           { 
            q.add(ques); 

            k=k+9; 
            break; 
           }else if(payload.substring(k, k+4).equals("id=\"")) 
           { 
            //get id 
            for(int j=k+4;j<payload.length();j++) 
            { 
             if(payload.substring(j, j+1).equals("\"")) 
             { 
              ques.setId(id); 
              id=""; 
              k=j+1; 
              break; 
             }else 
             { 
              id= id + payload.substring(j, j+1); 
             } 
            } 
            //check for text 
           }else if(payload.substring(k, k+6).equals("text=\"")) 
           { 
            for(int j=k+6;j<payload.length();j++) 
            { 
             if(payload.substring(j, j+1).equals("\"")) 
             { 
              ques.setText(text); 
              id=""; 
              k=j+1; 
              text=""; 
              break; 
             }else 
             { 
              text= text + payload.substring(j, j+1); 
             } 
            } 
            //check for options         
           }else if(payload.substring(k, k+11).equals("option id=\"")) 
             { 
              for(int l=k;l<payload.length();l++) 
              { 
               if(payload.substring(k, k+11).equals("</question>")) 
               { 
                ques.setOptions(option); 
                q.add(ques); 
                k=k+11; 
                break; 
               } 
              //now get all options and their id's 
              for(int j=k+11;j<payload.length();j++) 
              { 
               //get id and text 
               if(payload.substring(j, j+9).equals("</option>")) 
               { 
                option.add(singleoption); 
                singleoption=""; 
                k=j+9; 
                break; 
               }else{ 
                singleoption = singleoption +payload.substring(j,j+1); 
               } 

              } 
              } 
             } 

          } 
         } 
        } 
      } 


     for(int i=0;i<q.size();i++) 
     { 
      q.get(i).getText(); 
      q.get(i).getId(); 
      q.get(i).getOptions().toString(); 
     } 
    } 

    @Override 
    public boolean onCreateOptionsMenu(Menu menu) { 
     // Inflate the menu; this adds items to the action bar if it is present. 
     getMenuInflater().inflate(R.menu.profile_home, menu); 
     return true; 
    } 

} 
+0

BẠN CÓ THỂ GIÚP TÔI VỚI NÀY http://stackoverflow.com/questions/39391267/how-can-i-identify-same-xml-tag-second- thời gian/39843957 # 39843957 –

Các vấn đề liên quan