1

JAXBを使用してパーツをアンマーシャリングするには、xmlreaderを使用して次のxmlファイルを解析する必要があります。

<parents>
    <moms>
      <mom>
       ...
      </mom>
       <mom>
       ...
      </mom>
   ...
    </moms>
    <dads>
      <dad>
       ..
      </dad>
      ..
      ..
    </dads>
</parents>

要素に到達できますが、同じXmlreader変数を使用するか、まったく新しい変数を使用して<moms>、要素に到達できません。<dads>私はmoms要素を見つけて、そこに階層を入力することしかできません...

コード :

            fileInputStream = new FileInputStream( file );
        xmlStreamReader = Utils.getXMLStreamReader( fileInputStream, "UTF-8" );
        JAXBContext context = JAXBContext.newInstance(Moms.class, Dads.class);
        unmarshaller = context.createUnmarshaller();
        xmlStreamReader.nextTag();

            xmlStreamReader.require( XMLStreamConstants.START_ELEMENT, null, "parents" ); 
            xmlStreamReader.nextTag();
            xmlStreamReader.nextTag();
            xmlStreamReader.require( XMLStreamConstants.START_ELEMENT, null, part );
            xmlStreamReader.require( XMLStreamConstants.START_ELEMENT, null, "parents" ); 
           while ( xmlStreamReader.getEventType() == XMLStreamConstants.START_ELEMENT )
    {
        String localName = xmlStreamReader.getLocalName();

        if ( localName.equals("dads") )
        {
            xmlStreamReader.nextTag();
        }


        if (xmlStreamReader.getEventType() ==XMLStreamConstants.CHARACTERS) 
        {
            xmlStreamReader.next();
        }
    }                   
    }
4

1 に答える 1

3

次の XML が与えられた場合

<parents>
  <moms>
    <mom>A</mom>
    <mom>B</mom>
  </moms>
  <dads>
    <dad>C</dad>
  </dads>
</parents>

以下のコード

InputStream is = new FileInputStream("...");
XMLInputFactory xif = XMLInputFactory.newFactory();
XMLStreamReader xsr = xif.createXMLStreamReader(is);
while (xsr.hasNext()) {
  if (xsr.next() == XMLStreamConstants.START_ELEMENT
      && xsr.getLocalName().equals("dad")) {

    if (xsr.next() == XMLStreamConstants.CHARACTERS)
      System.out.println(xsr.getText());
  }
}

Cを出力します。

どうにかお父さんの要素を飛び越えたと思います。ロジックを単純化してみてください。nextTagビジネスを必要とするすべてが、私には間違っているように思えます。また、わかりませんが、whileの条件文はばかげているようです。代わりにxmlStreamReader.hasNextを使用し、完了したらループから抜け出します。

于 2012-10-14T09:48:50.203 に答える