2012-06-29 2 views
0

XMLPullParser를 사용하여 불행히도 또는 & amp와 같은 특수 문자가 포함 된 XML 문서를 구문 분석합니다 ...이 문자가 구문 분석 절차를 중단하고 이러한 문자 다음의 텍스트 만 표시되지만 이전에는 표시되지 않은 것으로 보입니다 (특수 문자가 일부 텍스트 내용의 중간에 나타나는 경우). 이 XML 파일에 대한 제어권이 없으므로 문서를 파싱하는 동안이 문제를 해결해야합니다.XMLPullParser 특수 문자

어떻게하면됩니까? 이미 몇 가지 연구를했고 ENTITY_REF라는 eventType을 구현할 수 있었지만 그 접근 방법을 처리하는 방법을 모르겠습니다.

몇 가지 힌트를 기쁘게 생각합니다.

내 파서 : SAX처럼

while (eventType != XmlPullParser.END_DOCUMENT) { 
     if (eventType == XmlPullParser.START_TAG) { 
      currentTag = xpp.getName(); 

     } else if (eventType == XmlPullParser.TEXT) { 

      if ("title".equals(currentTag)) { 
       currentEvent.setTitle(xpp.getText()); 
       System.out.println("Event title: " + xpp.getText()); 
      } 
     } else if (eventType == XmlPullParser.END_TAG) { 
      if ("event".equals(xpp.getName())) { 
       events.add(currentEvent); 
       currentEvent = new Event(); 
      } 
     } else if (eventType == XmlPullParser.ENTITY_REF) { 
      System.out.println("Entity REF: " + xpp.getText()); 
     } 


     eventType = xpp.nextToken(); 
    } 
+0

나는이 질문에 대답 할 것보다 그 코드에 관심이 있다면 domparser를 시도해 본다. – Khan

+0

은 내 애플리케이션에 너무 느리기 때문에 DOm에 관심이 없다. 감사하지만. –

답변

1

는 XMLPullParser은 매우 낮은 수준의 구문 분석 인터페이스, 사용성에서 상당한 비용으로 높은 성능을 달성이다. 구문 분석기는 텍스트 노드를 파편으로 분해 할 수 있으며 코드는 조각의 시퀀스를 받아 들여 실제 문자열 값으로 어셈블해야합니다.

+0

allright는 단편을 하나의 문자열로 어셈블하는 String Builder로 고정 시켰습니다. –

0

확장하지 않으시겠습니까 DefaultHandler 사용하기가 훨씬 쉬우 며 코드를 더 재사용 할 수 있습니다. 나는 그런 문제에 직면하지 않을 것이라고 생각한다.

+1

SAX는 구문 분석기가 텍스트 노드를 여러 호출로 분할하여 제공 할 수있는 동일한 문제를 가지고 있으며 응용 프로그램에서 텍스트 노드를 어셈블해야합니다. StackOverflow에서 SAX 사용자가보고 한 문제의 가장 일반적인 원인입니다. –