【问题标题】:How can I parse XML android?如何解析 XML android?
【发布时间】:2014-05-13 19:15:00
【问题描述】:

我在解析 XML 时遇到问题,我尝试了很多方法。

我有这样的xml。

<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>

我需要得到问题,我想将它们保存在一个数组中,然后有一些问题具有作为子标签的选项,我想将这些选项添加到另一个数组中并引用该问题 ID。

我怎样才能真正解析这个xml?

我一直在尝试使用 XMLPullParser 来做到这一点

这是我的代码,但它不起作用。

 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();

【问题讨论】:

    标签: android xml xml-parsing xmlpullparser android-xmlpullparser


    【解决方案1】:

    我已经构建了自己的解析器来解析这个 xml。

    这里是代码

    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;
        }
    
    }
    

    【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-11-06
    • 2012-11-27
    • 2013-10-04
    • 1970-01-01
    • 2012-05-21
    相关资源
    最近更新 更多