2014-09-17 1 views
0

Я создаю приложение, в котором я получаю xml с сервера, который содержит специальный символ, когда я разбирал его на стороне android. Я получаю другую строку одной строки, которая содержит специальный символ. . Вот пример генерируется XML:Неправильное получение данных со специальным символом в xml

<field> 
<option>Didn&apos;t Apply For Card,Do Not Want the Card,No</option> 
<validation>NA</validation> 
<field_name>self_closed</field_name> 
</field> 

Вот мой код:

String tagname,value = null,t_name; 
    t_name=table_name; 
    XmlPullParserFactory xmlPullParserFactory = null; 
    XmlPullParser xmlPullParser = null; 

    //System.out.println("In parse UI table name:"+table_name); 
    result=input_stream; 
    try { 
     xmlPullParserFactory = XmlPullParserFactory.newInstance(); 
     xmlPullParserFactory.setNamespaceAware(true); 
     xmlPullParser = xmlPullParserFactory.newPullParser(); 
    //System.out.println("Load file :"+result); 
     xmlPullParser.setInput(result,"UTF-8"); 
     //xmlPullParser.defineEntityReplacementText("&#38;","&"); 
     int eventType = xmlPullParser.getEventType(); 
     while (eventType != XmlPullParser.END_DOCUMENT) 
     { 
        tagname=xmlPullParser.getName();  
        if(eventType==XmlPullParser.START_TAG) 
        { 

        } 
        else if(eventType==XmlPullParser.TEXT) 
        { 
         value=xmlPullParser.getText(); 
         if(value.isEmpty()) 
         { 
          System.out.println("string is empty"); 
         } 
         value=conversion.add_special_character(value); 
         System.out.println("value:"+value); 
         value=value.trim(); 

        System.out.println(" text tag value :"+value); 
        } 
        else if(eventType==XmlPullParser.END_TAG) 
        { 
         if(tagname.equals("field")) 
         { 
          //System.out.println("field"+field+" table name:"+t_name); 
          dbController.insert_into_fields(field, t_name); 
          //database.insert_into_fields(field); 
          field.clear(); 
         } 
         if(tagname.equals("field_name")) 
         { 

          field.put("field_name", value); 

         } 
         if(tagname.equals("type")) 
         { 
          field.put("input_type", value); 
         } 
         if(tagname.equals("label")) 
         { 
          field.put("label", value); 
         } 
         if(tagname.equals("option")) 
         { 
          //System.out.println("in option tag option:"+value); 
          field.put("option", value); 
         } 
         if(tagname.equals("validation")) 
         { 
          //System.out.println("In validation tag:"+value); 
          field.put("validation", value); 
         } 
        // System.out.println("Tag_name :"+tagname); 
        } // end of else end tag 

      eventType = xmlPullParser.nextToken(); 
     }// end of while loop 
     dbController.close_database(); 
    } // end of try 
    catch (Exception e) 
    { 
     // TODO: handle exception 
     e.printStackTrace(); 
    } // end of catch 

, когда я анализирую его вместо того, чтобы «не применять для карты» в качестве целой строки я получаю это как две разные строки «Ждут» и t подать заявку на карточку

+0

'xmlPullParser.setInput (результат, "UTF-8");' То есть, где вы даете XML для синтаксического анализатора я полагаю. Я не знаю, как это исправить, но я бы сделал следующие тесты, если бы я был вами. Замените строку на результат, прежде чем передать его парсеру. Измените «'» на «» для первого теста. Но похоже, что парсер распознает «», поэтому второй тест, который я сделал бы, это заменить «'» на «\\». – greenapps

+0

Посмотрите на html-объекты. http://www.w3schools.com/html/html_entities.asp В java есть класс, который вы также можете использовать для него. – greenapps

ответ

0

Попробуйте использовать этот код для разбора XML:

XmlPullParserFactory factory = XmlPullParserFactory.newInstance(); 
    factory.setNamespaceAware(true); 
    XmlPullParser parser = factory.newPullParser(); 
    parser.setInput("xml input stream", null); 

     int eventType = parser.getEventType(); 
     while (eventType != XmlPullParser.END_DOCUMENT) { 
      String tagname = parser.getName(); 
      switch (eventType) { 
      case XmlPullParser.START_TAG: 
       if (tagname.equalsIgnoreCase("field")) { 
       } 
       break; 

      case XmlPullParser.TEXT: 
       text = parser.getText(); 
       break; 

      case XmlPullParser.END_TAG: 
       if (tagname.equalsIgnoreCase("field")) { 

       } else if (tagname.equalsIgnoreCase("option")) { 
        System.out.println(text); 
       } 
       break; 

      default: 
       break; 
      } 
     } 

    } catch (XmlPullParserException e) {e.printStackTrace();} 
    catch (IOException e) {e.printStackTrace();} 
} 
+0

Спасибо, его работы для меня ... –

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

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