我该如何解析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; } } (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |