2011-12-19 5 views
0

私はXMLファイルの開始があります。Javaを使用してxmlを正しく反復処理するにはどうすればよいですか?

<?xml version="1.0"?> 
<results> 
    <result id="0001"> 
     <hometeam> 
      <name>Dantooine Destroyers</name> 
      <score>6</score> 
     </hometeam> 
     <awayteam> 
      <name>Wayland Warriors</name> 
      <score>0</score> 
     </awayteam> 
    </result> 
    <result id="0002"> 
     <hometeam> 
      <name>Dantooine Destroyers</name> 
      <score>3</score> 
     </hometeam> 
     <awayteam>... 

とJavaファイルに:文が<name>要素のために真であることがあれば

if(event.isStartElement()){ 
    if(event.asStartElement().getName().getLocalPart().equals(HOME)){ 
     System.out.println("In hometeam"); // for testing purposes 

     event = eventReader.nextEvent(); // I expect <name> element 

     if(event.isStartElement()){ // <------------ FALSE 
      if(event.asStartElement().getName().getLocalPart().equals(NAME)){.... 

私はこれを期待するが、私はSystem.out.println(event.isStartElement())に固執する場合私はFALSEを得る....

event.getEventType()返信XMLEvent.CHARACTERS私は理解していない...誰かがなぜ見ることができますか?

必要に応じて、タグ/タイトルや質問を自由に編集してください。

+2

独自のパーサーを書く代わりにフレームワークを使用できませんか? JAXBまたはXStreamを使用してJavaオブジェクトを自動的に生成します。 – Kai

+0

自分のパーサーを書くための私の仕事 – Mead3000

+0

彼はSAXに基づいたStAX(Streaming API for XML)を使用していると思いますので、イベント指向のコードです。 – jjmontes

答えて

1

文字は、XMLの次の部分が文字(あなたの改行と字下げの場合)であることを意味します。低レベルのパーサはあなたのために捨てられません。生のイベントだけを配信します。構造を正しく処理するのはあなたの仕事です。

+0

ちょうどあなたが最初だったから – Mead3000

1

その.nextEvent()コールはおそらく<hometeam><name>の間の空白を持ち込んでいます。 XMLでは、タグ間のすべての文字データ(空白または改行であっても)もAPIからアクセスできることに注意してください。

要素を印刷することでこれをテストできます。

通常、DOMベースのAPIを持つ(または無視するのは簡単ですが)イベント駆動型API(SAXやStAXなど)では無視する必要があります。

+0

ありがとう...しかし、あなたは私が受け入れるのが遅い – Mead3000

関連する問題