2013-03-26 2 views
1

Я хочу проанализировать XML-файл, который я экспортировал из программного обеспечения базы данных, для моего приложения для Android. Однако некоторые из тегов имеют аргументы типа так:Android: Parse XML Data: Теги с аргументами

<row>
<value column="Index" null="false">1</value>
<value column="Front" null="false">INFO</value>
<value column="Back" null="false">INFO</value>
<value column="Check" null="false">0</value>
</row>

, что строковое значение этого я указать при попытке найти открывающий тег, чтобы разобрать его? (например: чтобы найти строку i, сравнить начальное нажатие с «row», и если оно вернет true, я вычислил данные. Что я делаю для каждого значения, например Index, Front, Back and Check отдельно?)

Мой Java код выглядит следующим образом

try{ 
    XmlPullParserFactory factory = XmlPullParserFactory.newInstance(); 
    factory.setNamespaceAware(true); 
    XmlPullParser xpp = factory.newPullParser(); 

    InputStream stream = context.getResources().openRawResource(com.Whydea.chemistryhelper.R.raw.appxml); 
    xpp.setInput(stream, null); 

    int eventType = xpp.getEventType(); 
    while (eventType != XmlPullParser.END_DOCUMENT){ 
     if(eventType==XmlPullParser.START_TAG){ 
      handleStartTag(xpp.getName()); //handels Start Tag 
     } else if (eventType==XmlPullParser.END_TAG){ 
      handleEndTag(xpp.getName()); 
      Ctag=null; 
     } else if (eventType==XmlPullParser.TEXT){ 
      handleText(xpp.getText()); 
     } 
     eventType=xpp.next(); 
    } 

    }catch (NotFoundException e){ 
     Log.d("XMLpp",e.getMessage());   
    }catch (XmlPullParserException e){ 
     Log.d("XMLpp",e.getMessage()); 
    }catch (IOException e){ 
     Log.d("XMLpp",e.getMessage()); 
    }  

`

EDIT:

Каждое "значение" начать теги имеет свой собственный атрибут (столбец = ...), как я получить доступ к тем?

Например: для доступа к строке у меня есть константа String со значением «row» и проверьте, соответствует ли начальный тег этому, и он работает. Но когда я объявляю строчную константу со значением "value column = \" Check \ "null = \" false \ "" (я должен использовать \ other wise "дать ошибки), он не находит find this start. должна моя постоянная быть?

ответ

0

, если я правильно понимаю ваш вопрос, то, чтобы получить каждое из значений, которые нужно сделать следующее, в основном вы хотите, чтобы получить значение каждого атрибута внутри XML-тега

  int attributeCount = xpp.getAttributeCount(); 
     for(int i = 0; i<attributeCount; i++){ 
      String name = xpp.getAttributeName(i); 
      //Log.d(TAG, "Name: "+name); 
      if(name != null && name.equalsIgnoreCase("column")){ 

       return Integer.parseInt(xpp.getAttributeValue(i));     
      } 
     } 

Так после того, как вы столкнулись с этой строкой, вы будете искать начальное значение «тега» после его поиска, а затем используйте приведенный выше код, чтобы получить индивидуальное значение атрибутов.

ваш комментарий, если вы хотите получить текстовое значение тега XML, тогда вам придется использовать метод getText(). После того, как вы нашли значение START_TAG затем выполнить следующий код:

    eventType = xpp.next(); 
        if(eventType == XmlPullParser.TEXT){ 
         String text = xpp.getText();        
        } 

Для XML-тега значение «INFO» будет возвращать «INFO»

+0

в код <столбце значение = «Назад» нуль = «ложь»> INFO, я хочу, чтобы данные INFO – xSooDx

+0

I отредактировали мой ответ о том, как вернуть значение текста «INFO» –

+0

Большое спасибо, это решило мою проблему. – xSooDx

0

Вы разработали приложение, которое генерирует файл XML? Если да, то почему бы вам не изменить его? Было бы гораздо проще разобрать XML, если он имеет следующий формат:

<item Index="1" Front="INFO" Back="INFO" Check="0"/> 
<item Index="2" Front="INFO" Back="INFO" Check="1"/> 
+0

У них все еще есть разные атрибуты. Как мне получить доступ к этим атрибутам для их идентификации? – xSooDx

+0

Использование анализатора SAX: просто переопределите методы _startElement_, _endElement_ и _character_. В _startElement_ вы получаете каждый узел XML, и вы можете получить значения атрибутов. Как? С объектом _Attributes_ (параметр _startElement_): вы получите «INFO», выполнив это _attributes.getValue («Front») _ – Alberto

0
try { 
     final Service S = new Service(); 
     String xmlString = S.ImportAllPollBoothStatus(IMEI,asscd, boothno); 
     if(xmlString.toLowerCase().trim().equals("false")){ 
      return false; 
     } 
     DocumentBuilderFactory docFactory = DocumentBuilderFactory 
       .newInstance(); 
     DocumentBuilder docBuilder = docFactory.newDocumentBuilder(); 
     InputSource is = new InputSource(); 
     is.setCharacterStream(new StringReader(xmlString)); 
     Document doc = docBuilder.parse(is); 

     NodeList nodes = doc.getElementsByTagName("HT"); 

     for (int i = 0; i < nodes.getLength(); i++) { 

      Element element = (Element) nodes.item(i); 
      NodeList blockidnodes = doc.getElementsByTagName("Table"); 

      for (int blockidcount = 0; blockidcount < blockidnodes 
        .getLength(); blockidcount++) { 

       NodeList PollpercentId = element 
         .getElementsByTagName("PollpercentId"); 
       Element line1 = (Element) PollpercentId.item(blockidcount); 

       NodeList asscd1 = element 
         .getElementsByTagName("asscd"); 
       Element line2 = (Element) asscd1.item(blockidcount); 

       NodeList pollgcd = element 
         .getElementsByTagName("pollgcd"); 
       Element line3 = (Element) pollgcd.item(blockidcount); 


       NodeList SessionYearIdref = element 
         .getElementsByTagName("SessionYearIdref"); 
       Element line4 = (Element) SessionYearIdref.item(blockidcount); 

       NodeList MaleVoters = element 
         .getElementsByTagName("MaleVoters"); 
       Element line5 = (Element) MaleVoters.item(blockidcount); 

       NodeList FemaleVoters = element 
         .getElementsByTagName("FemaleVoters"); 
       Element line6 = (Element) FemaleVoters.item(blockidcount); 

       NodeList UpdatedDate = element 
         .getElementsByTagName("UpdatedDate"); 
       Element line7 = (Element) UpdatedDate.item(blockidcount); 

       NodeList timeslot = element 
         .getElementsByTagName("timeslot"); 
       Element line8 = (Element) timeslot.item(blockidcount); 


      this.db.insertVotingStatus(
         getCharacterDataFromElement(line1), 
         getCharacterDataFromElement(line2), 
         getCharacterDataFromElement(line3), 
         getCharacterDataFromElement(line4), 
         getCharacterDataFromElement(line5), 
         getCharacterDataFromElement(line6), 
         getCharacterDataFromElement(line7), 
         getCharacterDataFromElement(line8)); 

      } 
     } 


    } 
    catch (Exception e) { 
     Log.e("EXCEPTION DURING VIDHANSABHA INSERION", 
       "======Insert-VIDHANSABHA-DETAILS=====================" + e); 
     return false; 
    } 
    return true; 

 Смежные вопросы

  • Нет связанных вопросов^_^