<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을 사용하고 있습니다. 여기에 어떤 아이디어가 있습니까?
네 말이 맞아. 나는 그들을 완전히 간과했다. 해결책은 'reader.nextTag()'를 호출하여 공백을 건너 뛰고 ''에서 텍스트를 가져 오기 위해 'reader.getElementText()'를 호출하는 것입니다. –
Joeblackdev
이 '빈 문자열'은 실제로 ' crlf '를 공백 문자와 함께 사용하십시오. – Joeblackdev