0

私はまだプログラミングに慣れていないので、誰かが私を助けてくれれば幸いです。基本的に、アンマーシャリングしたい映画ファイルがあり、system.out の出力として「Robert Benton」の人/監督のみが含まれています。

JAXBU を使用した Java クラス

        package jaxbadv;

    import java.io.File;
    import java.util.Iterator;
    import java.util.List;

    import org.me.media.*;
    /**
     *
     * @author Ket
     */
    public class rbFilms {

    public static void main(String[] args) {
        // Create root XML node 'todaysShow' and get its main element 'movies_today'
        ShowingToday todaysShow = new ShowingToday();
        List<MovieType> movies_today =  todaysShow.getMovieCollection();
        // Create Movie instanses and add them to the 'movies_today' collection
        MovieType film;


        film = new MovieType();
        film.getTitle();
        film.getDirector();
        film.getYear();

        try {
            javax.xml.bind.JAXBContext jaxbCtx = javax.xml.bind.JAXBContext.newInstance(film.getClass().getPackage().getName());
            javax.xml.bind.Unmarshaller unmarshaller = jaxbCtx.createUnmarshaller();
            film = (MovieType) unmarshaller.unmarshal(new java.io.File("Now_Showing.txt")); //NOI18N

            //print out only movies produced after 1990
            MovieType nextMovie = new MovieType();
            Iterator itr = movies_today.iterator();
            while(itr.hasNext()) {
                nextMovie = (MovieType) itr.next();
                if(nextMovie.getDirector() == "Robert Benton") {
                    System.out.println(nextMovie.getTitle());
                }
            }


        } catch (javax.xml.bind.JAXBException ex) {
            // XXXTODO Handle exception
            java.util.logging.Logger.getLogger("global").log(java.util.logging.Level.SEVERE, null, ex); //NOI18N
        }




    }
}

XML ファイル

    <?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<Showing_Today xmlns="http://xml.netbeans.org/schema/Shows">
    <movie_collection>
        <Title>Red</Title>
        <Director>Robert Schwentke</Director>
        <Year>2010</Year>
    </movie_collection>
    <movie_collection>
        <Title>Kramer vs Kramer</Title>
        <Director>Robert Benton</Director>
        <Year>1979</Year>
    </movie_collection>
    <movie_collection>
        <Title>La Femme Nikita</Title>
        <Director>Luc Besson</Director>
        <Year>1997</Year>
    </movie_collection>
    <movie_collection>
        <Title>Feast of love</Title>
        <Director>Robert Benton</Director>
        <Year>2007</Year>
    </movie_collection>
</Showing_Today>

JAXB バインディングで生成されたソース - ShowingToday

    package org.me.media;

import java.util.ArrayList;
import java.util.List;
import javax.xml.bind.annotation.XmlAccessType;
import javax.xml.bind.annotation.XmlAccessorType;
import javax.xml.bind.annotation.XmlElement;
import javax.xml.bind.annotation.XmlRootElement;
import javax.xml.bind.annotation.XmlType;

@XmlAccessorType(XmlAccessType.FIELD)
@XmlType(name = "", propOrder = {
    "movieCollection"
})
@XmlRootElement(name = "Showing_Today")
public class ShowingToday {

    @XmlElement(name = "movie_collection")
    protected List<MovieType> movieCollection;

public List<MovieType> getMovieCollection() {
        if (movieCollection == null) {
            movieCollection = new ArrayList<MovieType>();
        }
        return this.movieCollection;
    }

}
4

1 に答える 1

1

コードで行っている Java の基本的な間違いがいくつかあります。たとえば、効果のない割り当てがいくつかあります。

showingToday todaysShow = new ShowingToday(); // value isn't used
List<MovieType> movies_today =  todaysShow.getMovieCollection(); // value isn't used

そして、変数を初期化し、それに対して効果のないget呼び出しを行っているいくつかの場所:

film = new MovieType(); // values is never used
film.getTitle();        // this and the other get calls are not needed
film.getDirector();
film.getYear();

これらを修正する必要があります。


特定の JAXB 問題に関する限り、私が知る限り、ShowingTodayXML ストリームからインスタンスを逆シリアル化し、そこから情報にアクセスする必要があります。コードは次のようになります。

try {
   final JAXBContext context = JAXBContext
         .newInstance(ShowingToday.class);
   final Unmarshaller unmarshaller = context.createUnmarshaller();
   final ShowingToday showingToday = unmarshaller.unmarshal(
         new StreamSource(new File("absolute path of file here")),
         ShowingToday.class).getValue();

} catch (final Exception e) {
   // Do something useful here
}
于 2012-12-10T18:07:41.767 に答える