2010-02-15 3 views
7

일부 XHTML을 사용하는 작은 화면 스크래핑 앱을 작성 중입니다. XTHML이 유효하지 않음에도 불구하고 앰퍼샌드가 &으로 이스케이프되지 않습니다.Android XmlPullParser로 잘못된 앰퍼샌드 구문 분석

나는 안드로이드의 XmlPullParser을 사용하고 그리고 그것은 잘못 인코딩 된 값에 따라 다음과 같은 오류 밖으로 결선 : 나는이 문제를 어떻게합니까

org.xmlpull.v1.XmlPullParserException: unterminated entity ref 
(position:START_TAG <a href='/Fahrinfo/bin/query.bin/dox?ld=0.1&n=3&i=9c.0323581.1266265347&rt=0&vcra'> 
@55:134 in [email protected]) 

를? 나는 다음과 같은 솔루션에 대한 생각 : 그것은 마술 잘못된 마크 업을 받아들이도록

  1. 이 파서 구성 엔티티 심판
  2. 와 앰퍼샌드를 대체하는 또 다른 하나의 InputStream 포장 사람이 가능성이

성공하려면?

+1

이 질문을 게시 해 주셔서 감사합니다. XmlPullParser를 구문 분석하려고 시도한 일부 XML에서 "unterminated entity ref"를 경험했지만 그 원인을 정확히 알지 못했습니다. 하지만 이제는 가능한 원인으로 Firefox가 소스 모드를 제외하고는 표시되지 않는 유효하지 않은 XML을 발생시키는 이스케이프 처리되지 않은 앰퍼샌드에 대해 언급 했으므로 문제가 무엇인지 확실하게 파악하여 수정하기가 훨씬 쉽습니다. –

답변

2

첫 번째 옵션은 앰퍼샌드를 바꾸는 것이 다른 것보다 더 적합한 솔루션이라고 생각합니다. 두 번째 옵션은 해킹의 더 많은 것으로 보이며 잘못된 마크 업을 수락하여 제대로 작동합니다.

6

필자는 약 1 시간 동안이 문제에 봉착하여 XML PULL PARSER로 해결할 수없는 "&"이라고 생각하기에 해결책을 찾았습니다. 그래서 여기에 그것을 완전히 고치는 코드가 있습니다.

void ParsingActivity(String r) { 
    try { 
     parserCreator = XmlPullParserFactory.newInstance(); 
     parser = parserCreator.newPullParser(); 
     // Here we give our file object in the form of a stream to the 
     // parser. 
     parser.setInput(new StringReader(r.replaceAll("&", "&amp;"))); 
     // as a SAX parser this will raise events/callback as and when it 
     // comes to a element. 
     int parserEvent = parser.getEventType(); 
     // we go thru a loop of all elements in the xml till we have 
     // reached END of document. 
     while (parserEvent != XmlPullParser.END_DOCUMENT) { 
      switch (parserEvent) { 
      // if u have reached start of a tag 
      case XmlPullParser.START_TAG: 
       // get the name of the tag 
       String tag = parser.getName(); 

꽤 많이 나는 URL을 파싱 처리 된 이후 난 그냥 &amp;으로 &를 교체하고있어 뭘하는지. 희망이 도움이됩니다.