2011-07-05 4 views
2
내가

하는 XMLStreamReader - 이상한 오류

<class name="ContentStreamer"> 
     <method name="sendAudio"> 
      <criteria>medium</criteria> 
     </method> 
     <method name="sendVideo"> 
      <criteria>weak</criteria> 
     </method> 
    </class> 

나는 다음과 같은 코드로 반복 다음 XML 코드 (에 XMLStreamReader를 사용) 한

if (reader.getEventType() == XMLStreamReader.START_ELEMENT) { 
    String elementName = reader.getName().toString(); 
    if (elementName.equalsIgnoreCase("class")) { 
     // get the class name and construct a Class 
     classComposition = new ClassComposition(); 
     classComposition.setName(reader.getAttributeValue(0)); 
     System.out.println("***** Class: " + reader.getAttributeValue(0)); 
    } 
    else if (elementName.equalsIgnoreCase("method")) { 
     MethodCriterion method = new MethodCriterion(); 
     method.setMethodName(reader.getAttributeValue(0)); 
     System.out.println("***** Method: " + reader.getAttributeValue(0)); 
     // move forward and get the text from the '<criteria>' element 
     reader.next(); 
     System.out.println("!!!" + reader.getName().toString()); 
    } 
    else if (elementName.equalsIgnoreCase("criterion")) { 
     return compositions; 
    } 
} 

내가 콘솔에서 얻을 출력은 다음과 같습니다

***** Class: ContentStreamer 
***** Method: sendAudio 
There was an error parsing the composition file 
java.lang.IllegalStateException: Illegal to call getName() when event type is CHARACTERS. Valid states are START_ELEMENT, END_ELEMENT 
    at com.sun.org.apache.xerces.internal.impl.XMLStreamReaderImpl.getName(Unknown Source) 

나를 괴롭히는 코드 영역은 마지막으로 'reader.next()'이고 ' System.out.println '. '<criteria>'요소가 텍스트 요소 일 뿐이므로이 메서드는 '텍스트 전용 요소'(인용)의 텍스트를 읽으므로 'reader.getName().toString()'을 'reader.getElementText()'으로 바꿉니다. 'reader.getEventType()'을 사용하여 이벤트 유형을 확인한 후 'CHARACTERS'에 해당하는 4를 반환합니다. 그래서 그 경우, 나는 'reader.getText()'시도하고 이것은 단지 빈 문자열을 반환합니다. Java 6을 사용하고 있습니다. 여기에 어떤 아이디어가 있습니까?

답변

1

<method name="sendAudio"><criteria>medium</criteria> 사이에는 개행 문자와 공백이 있습니다. 이것들은 텍스트 노드를 형성하기 때문에 이벤트 유형으로 CHARACTERS이됩니다.

getText()을 호출하면 빈 문자열이 표시됩니다. 줄 바꿈 문자와 공백 문자 만있는 문자열이 아니 었습니까?

+0

네 말이 맞아. 나는 그들을 완전히 간과했다. 해결책은 'reader.nextTag()'를 호출하여 공백을 건너 뛰고 ''에서 텍스트를 가져 오기 위해 'reader.getElementText()'를 호출하는 것입니다. – Joeblackdev

+1

이 '빈 문자열'은 실제로 ' crlf '를 공백 문자와 함께 사용하십시오. – Joeblackdev