2017-04-26 8 views
-1

저는 이와 같이 보이는 XML을 구문 분석하려고합니다. xml의 ​​올바른 형식은 파싱하는 방법입니다. 그리고 나는 xml의 형식이 무엇인지 알고 싶습니다.XML 파서에 문제가 있습니다.

<string xmlns="http://schemas.microsoft.com/2003/10/Serialization/">1|3|195,317,65,108|342,227,66,99|280,98,84,112</string> 

내 XML 파서 활동 는

public class RetrieveFeed extends AsyncTask { 

URL url; 
ArrayList<String> headlines = new ArrayList(); 
ArrayList<String> links = new ArrayList(); 
@Override 
protected Object doInBackground(Object[] objects) { 
    // Initializing instance variables 


    try { 
     url = new URL("http://54.179.134.139/viViewapi/api/values"); 

     XmlPullParserFactory factory = XmlPullParserFactory.newInstance(); 
     factory.setNamespaceAware(false); 
     XmlPullParser xpp = factory.newPullParser(); 

     // We will get the XML from an input stream 
     xpp.setInput(getInputStream(url), "UTF_8"); 


     boolean insideItem = false; 

     // Returns the type of current event: START_TAG, END_TAG, etc.. 
     int eventType = xpp.getEventType(); 
     while (eventType != XmlPullParser.END_DOCUMENT) { 
      if (eventType == XmlPullParser.START_TAG) { 

       if (xpp.getName().equalsIgnoreCase("html")) { 
        insideItem = true; 
       } else if (xpp.getName().equalsIgnoreCase("pre")) { 
        if (insideItem) 
         headlines.add(xpp.nextText()); //extract the headline 
       } 
       /*else if (xpp.getName().equalsIgnoreCase("link")) { 
        if (insideItem) 
         links.add(xpp.nextText()); //extract the link of article 
       }*/ 
      } else if (eventType == XmlPullParser.END_TAG && xpp.getName().equalsIgnoreCase("html")) { 
       insideItem = false; 
      } 

      eventType = xpp.next(); //move to next element 
     } 

    } catch (MalformedURLException e) { 
     e.printStackTrace(); 
    } catch (XmlPullParserException e) { 
     e.printStackTrace(); 
    } catch (IOException e) { 
     e.printStackTrace(); 
    } 

    return headlines; 
} 


public InputStream getInputStream(URL url) { 
    try { 
     return url.openConnection().getInputStream(); 
    } catch (IOException e) { 
     return null; 
    } 
} 

public ArrayList<String> heads() 
{ 
    return headlines; 
} 

}

내가이 접근 방식은 옳고 그름인지 몰라

+0

제목에 문제가 있다고 표시되지만 문제가 무엇인지는 밝히지 않았습니다. 질문의 본문에 "xml의 형식이 무엇인지 알고 싶습니다."라고되어 있지만 SO에 대해서는 완전히 부적절한 질문입니다. XML의 형식을 설명하는 많은 참고 자료가 있습니다. –

답변

0

JSON과 같은 XML은 적어도 하나 개의 루트를 필요로 요소. 귀하의 예에서 에 "string"이라는 루트 요소를 가지고 있으므로 여기에 문제가 없습니다.

빠른 XML 자습서는 XML Syntax Guide을 확인하십시오. "string"은 예약어가 아니기 때문에 사용할 수 있습니다 (XML Reserved Words 참조).

게시 한 XML 스 니펫이 유효한 XML입니다. 이 XML Validator을 사용하여 XML의 유효성을 검사 할 수 있습니다.

<string>1|3|195,317,65,108|342,227,66,99|280,98,84,112</string> 

을이 XML이 하나의 캐릭터를 설명 : 그것은 될 수 있도록 반드시 여기에 xmlns property (네임 스페이스)가 필요하지 않습니다

. 당신이 문자열 속성을 가진 객체를 설명하고 싶었다면 당신은 XML로 이런 일을 할 것이다 : 당신이 다음이 이전 simple xml parsing 스택 오버플로 답변을 확인 XML에서 값을 읽기에 대해 더 알고 싶다면

<root> 
    <string>1|3|195,317,65,108|342,227,66,99|280,98,84,112</string> 
</root> 

.