我有以下XML代碼的XMLStreamReader - 奇怪的錯誤
<class name="ContentStreamer">
<method name="sendAudio">
<criteria>medium</criteria>
</method>
<method name="sendVideo">
<criteria>weak</criteria>
</method>
</class>
我遍歷它用下面的代碼(使用的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
'。 我已將'reader.getName().toString()
'替換爲'reader.getElementText()
',因爲'<criteria>
'元素僅爲文本元素,API表示此方法讀取'僅文本元素'(引用)的文本。我使用'reader.getEventType()
'檢查了事件類型並返回了一個4,對應於'CHARACTERS'。所以在這種情況下,我嘗試'reader.getText()
',這只是返回一個空字符串。我正在使用Java 6.任何想法發生了什麼?
你說得對。我完全忽略了他們。解決方法是調用'reader.nextTag()'跳過空格,然後調用'reader.getElementText()'從'' –
Joeblackdev
獲取文本是的,這個我所謂的'空字符串'實際上是一個' crlf'與空格字符。 – Joeblackdev