2011-07-05 11 views
2

私は次の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を使用しています。何が起こっているのか?

答えて

1

<method name="sendAudio"><criteria>medium</criteria>の間には、改行文字と複数のスペースがあります。これらはテキストノードを形成するため、イベントタイプとしてCHARACTERSが得られます。

getText()を呼び出すと、空の文字列があることに驚いています。改行とスペース文字だけの文字列ではないと確信していますか?

+0

あなたはそうです。私はそれらを完全に見落とした。解決策は 'reader.nextTag()'を呼び出して空白をスキップし、 ''からテキストを取得するために 'reader.getElementText()'を呼び出します。 – Joeblackdev

+1

これはいわゆる空の文字列です。 crlf 'をスペース文字で置き換えます。 – Joeblackdev