2012-12-30 3 views

답변

1

(이 완전히 잘못되면 이렇게 사과) 내가 전에 XmlPullParser를 사용하지 않는했지만 전화 할 때 nextToken() 당신이 반환 값을보고 IGNORABLE_WHITESPACE 건너 뛸 할 것 같은 JavaDoc을 한 눈을 가진, 그것은 보인다.

다음은 부적절했습니다 (감사합니다 Jeff) : 현재 XmlPullParser를 사용해야합니까? 당신이 달성하려고하는 것처럼 그것 소리를 기반으로, 나는 더 높은 수준의 API를 Simple 같은 고려할 것. 나는 일반적으로 JAXB을 사용한다. 그러나 그것은 선택의 여지가 없다.

+2

그는 아마도 메모리 제약으로 인해 끌어 오기 구문 분석기를 사용하고 있습니다. Android에 익숙한 지 잘 모르겠지만 대규모 XML 문서를 구문 분석하는 것은 전체 메모리 내 AST에서 가능하지 않습니다. 특정 크기 이상을 처리하려면 풀 해석을 사용해야합니다. –

+0

아, 알았어. +1 고마워 :) – phippsnatch

+0

그가 XmlPullParser로 할 수있는 일에 대한 실제 제안이 맞습니까? 아니면 더 좋은 방법이 있습니까? 분명히 나는 ​​핸드셋이 아닌 서버를 다루는 데 익숙하다. :) 재미 있습니다! – phippsnatch

1

공백을 무시하는 설정이있는 경우 IDK. 현재 노드를 문자열로 추적하면 공백을 무시하도록 코딩 할 수 있습니다. 현재 노드가 비어 있으면 텍스트를 무시하십시오. 내 테스트 결과, 그냥 줄 바꿈 등을 피할 수있는 것으로 나타났습니다. 나는 다음과 같이 그것을 최적화했다. 위험이 내가 당신

String N=""; // Yes I know its Capitalized but its the Current Node and very important to keep track of. 


if (eventType == XmlPullParser.START_TAG) { 
    N = xpp.getName();//save the name of the node. 

... 

} else if (eventType == XmlPullParser.END_TAG) { 
    N = "";//clear the name of the node. 
} else if (eventType == XmlPullParser.TEXT) { 
    //if the name of the node is not blank then process it 
if (!N.equals("")) { 
     //I have a node so process it 
    } 

행운

0

해결책 자신을 찾고 후 늦은 대답을 추가하기에이 작동하지 않을 수 있습니다 사용하고있어 XML에서 작동합니다.

구문 분석기에는 isWhiteSpace() 메서드가 있습니다. 텍스트 관련 이벤트 유형 (예 : TEXT, CDSECT, IGNORABLE_WHITESPACE)에서만 호출 할 수 있습니다. 그렇지 않으면 예외가 발생합니다.

next 또는 getEventType을 호출하여 이벤트 유형을 가져올 수 있습니다.

next을 호출하면 IGNORABLE_WHITESPACE 이벤트가 자동으로 건너 뜁니다. 이 이벤트 유형은 nextToken을 호출 할 때만 유효하며 모든 세분화 된 이벤트 유형에 적용됩니다. next를 호출하여 "무시할 수있는"공백을 건너 뛰더라도 파서는 거의 모든 공백을 무시할 수없는 것으로 판단하므로 건너 뛸 수있는 권한이 필요합니다.

boolean isEoD = false; 

    do{ 
     switch (parser.next()){ 

      default: 
       break; 
      case XmlPullParser.TEXT: 

       if(!parser.isWhitespace()) //Throws if called on wrong eventType 
        System.out.println("Text: " + parser.getText()); 

       break; 
      case XmlPullParser.START_TAG: 
      case XmlPullParser.END_TAG: 
       System.out.println("TAG: " + parser.getName()+ "\n"); 
       break; 

      case XmlPullParser.END_DOCUMENT: 
       isEoD = true; 
     } 
    }while(!isEoD);