2011-11-16 12 views
0

これは自分のプログラムです 私はSTAXパーサーを使用してXML文書を解析しています。 ハードコードされた値を使用すると、その作業(item.account = "sss";)のみ を試みると、いつitem.account = eventReader.getElementText(); リストのサイズが0 です(リストアイテム=新しいArrayListを();)ハードコードされた値のみXMLパーサーが動作しています

import java.io.StringReader; 
import java.util.*; 
import javax.xml.stream.XMLEventReader; 
import javax.xml.stream.XMLInputFactory; 
import javax.xml.stream.XMLStreamException; 
import javax.xml.stream.XMLStreamReader; 
import javax.xml.stream.events.Attribute; 
import javax.xml.stream.events.EndElement; 
import javax.xml.stream.events.StartElement; 
import javax.xml.stream.events.XMLEvent; 

public class Pavan { 
    static final String DATE  = "date"; 
    static final String ITEM  = "item"; 
    static final String MODE  = "mode"; 
    static final String UNIT  = "unit"; 
    static final String CURRENT  = "current"; 
    static final String INTERACTIVE = "interactive"; 

    @SuppressWarnings({ "unchecked", "null" }) 
    public static void main(String args[]) { 
     List<Position> items = new ArrayList<Position>(); 
     try { 
      String documentAsString = "<request>\r\n" + "<accountid>1234</accountid>\r\n" + "<accountid>234</accountid>\r\n" + "</request>"; 

      StringReader stringReadertext = new StringReader(documentAsString); 
      XMLInputFactory inputFactory = XMLInputFactory.newInstance(); 
      XMLStreamReader reader = inputFactory.createXMLStreamReader(stringReadertext); 

      XMLEventReader eventReader = inputFactory.createXMLEventReader(reader); 
      Position item = null; 

      while (eventReader.hasNext()) { 
       XMLEvent event = eventReader.nextEvent(); 

       if (event.isStartElement()) { 
        StartElement startElement = event.asStartElement(); 
        if (startElement.getName().toString().equals("accountid")) { 

         item = new Position(); 

         item.account = "sss"; 
         //item.account = eventReader.getElementText(); 
        } 

       } 
       // If we reach the end of an item element we add it to the list 
       if (event.isEndElement()) { 
        EndElement endElement = event.asEndElement(); 
         if (endElement.getName().toString().equals("accountid")) { 
         items.add(item); 
        } 
       } 

      } 
     } catch (XMLStreamException e) { 
      e.printStackTrace(); 
     } 
     System.out.println(items.size()); 
    } 

} 


class Position 
{ 
String account ; 
} 

答えて

2

あなたの終了イベントは、 "食べられる" とあれば(event.isEndElement())されたためにトリガされませんでした。ただし、 "eventReader.getElementText()"が見つからないために "if(event.isEndElement())"がトリガーされます。

+0

PeterPeiGuoさん、どうしてevent.isEndElement()が正しく呼び出されていないのですか? if(event.isEndElement()){ EndElement endElement = event.asEndElement(); System.out.println(endElement.getName()。getLocalPart()); }これは呼び出され、印刷要求のみですが、accountidではなく、なぜですか?? – Revathi

+0

私はタグの数をキャプチャしてリストに追加する必要があるようなサンプルXMLだけを投稿したので、 – Revathi

+0

Peterありがとうございました。 – Revathi

1

私はgetElementText()が終了イベントを消費していると考えます。したがって、2番目のifブロックは決して入力されません。その方法のドキュメントは少し混乱しています。