私は次の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()
'に置き換えました。私は 'reader.getEventType()
'を使用してイベントタイプをチェックし、 'CHARACTERS'に対応する4を返します。その場合、私は 'reader.getText()
'を試しましたが、これは空の文字列を返します。私はJava 6を使用しています。何が起こっているのか?
あなたはそうです。私はそれらを完全に見落とした。解決策は 'reader.nextTag()'を呼び出して空白をスキップし、 ''からテキストを取得するために 'reader.getElementText()'を呼び出します。 –
Joeblackdev
これはいわゆる空の文字列です。 crlf 'をスペース文字で置き換えます。 – Joeblackdev