加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

我该如何解析XML android?

发布时间:2020-12-16 23:29:19 所属栏目:百科 来源:网络整理
导读:我在解析 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 i
我在解析 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();

解决方法

我已经构建了自己的解析器来解析这个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;
    }

}

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读