2016-02-22 2 views
-3

Я пытаюсь преобразовать из xml-файла в java, у меня нет опыта с этим. Так может кто-нибудь, пожалуйста, помогите мне с этим. это моя книга класс ниже.Как преобразовать xml в java

import java.util.*; 
import javax.xml.bind.annotation.*; 

@XmlRootElement(name= "book") 
public class book { 

private String ID; 
private String title; 
private String author; 
private String genre; 
private String price; 
private String publicationDate; 
private String discription; 



public book(String a, String b, String c, String d, String e, String f, String g){ 
    ID = a; 
    title = b; 
    author = c; 
    genre = d; 
    price = e; 
    publicationDate = f; 
    discription = g; 
} 
@XmlElement 
public String getID() { 
    return ID; 
} 

public void setID(String iD) { 
    ID = iD; 
} 
@XmlElement 
public String getTitle() { 
    return title; 
} 

public void setTitle(String title) { 
    this.title = title; 
} 
@XmlElement 
public String getAuthor() { 
    return author; 
} 

public void setAuthor(String author) { 
    this.author = author; 
} 
@XmlElement 
public String getGenre() { 
    return genre; 
} 

public void setGenre(String genre) { 
    this.genre = genre; 
} 
@XmlElement 
public String getPrice() { 
    return price; 
} 

public void setPrice(String price) { 
    this.price = price; 
} 
@XmlElement 
public String getPublicationDate() { 
    return publicationDate; 
} 

public void setPublicationDate(String publicationDate) { 
    this.publicationDate = publicationDate; 
} 
@XmlElement 
public String getDiscription() { 
    return discription; 
} 

public void setDiscription(String discription) { 
    this.discription = discription; 
    } 

} 

теперь я хочу, чтобы преобразовать файл XML в Java объекты файл XML я приложит bellow.`

<?xml version="1.0"?> 
    <catalog> 
    <book id="1"> 
     <author>Isaac Asimov</author> 
     <title>Foundation</title> 
     <genre>Science Ficition</genre> 
     <price>164</price> 
     <publish_date>1951-08-21</publish_date> 
     <description>Excellent.</description> 
    </book> 
    <book id="2"> 
     <author>Isaac Asimov</author> 
     <title>Foundation and Empire</title> 
     <genre>Science Fiction</genre> 
     <price>79</price> 
     <publish_date>1952-10-12</publish_date> 
     <description>Good.</description> 
    </book> 
</catalog> 

до сих пор я пытался преобразовать и прочитать файл XML, создав метод, приведенную ниже in my man class

enter code here 
import java.io.File; 

import javax.xml.bind.JAXBContext; 
import javax.xml.bind.JAXBException; 
import javax.xml.bind.Unmarshaller; 

public class Demo { 

    public static void unma() throws JAXBException { 
     JAXBContext jc = JAXBContext.newInstance(book.class); 
     Unmarshaller um = jc.createUnmarshaller(); 
     book b = (book) um.unmarshal(new File("src/Dv600/books.xml")); 
     System.out.println("information"); 
     System.out.println("id" + b.getID()); 
     System.out.println("Author" + b.getAuthor()); 
     System.out.println("description" + b.getDiscription()); 

    } 

    public static void main(String[] args) throws JAXBException { 

      unma(); 
    } 

} 
+0

ее не работает он дает мне ошибку. но я думаю, что я не преобразовал его правильно. Я хочу преобразовать этот XML-файл в java-объекты. – Alex

+1

Пожалуйста, сообщите об ошибке. – user3509208

+1

Вам нужно опубликовать исключение, чтобы мы могли видеть, что пошло не так. Но я предполагаю, что он не сможет найти ваш XML-файл в этом операторе 'new File (« src/Dv600/books.xml »)' – DaveH

ответ

1

Есть пара проблем с вашим кодом.

  1. @XMLAttribute является правильными аннотациями для идентификатора, как в соответствии с вашим XML ID является атрибутом книги не является элемент в качестве автора или описания.
  2. @XMLElement должен быть на методе установки не на методе геттера
  3. Не знаете, почему у вас есть конструктор в book.java, удалите его также.
  4. Что такое Catalog, в этом нет необходимости. Я приложил рабочий код, пожалуйста, дайте мне знать, если у вас есть какие-либо вопросы.

************** TEST.java ************ импорт java.io.File;

import javax.xml.bind.JAXBContext; 
import javax.xml.bind.JAXBException; 
import javax.xml.bind.Unmarshaller; 

public class Test { 

    public static void unma() throws JAXBException { 
     JAXBContext jc = JAXBContext.newInstance(Books.class); 
     Unmarshaller um = jc.createUnmarshaller(); 
     Books b = (Books) um.unmarshal(new File("c:/tester/books.xml")); 

     for (int i =0;i<b.getBooks().size();i++) { 
     Book bb = b.getBooks().get(i); 
     System.out.println(bb.getAuthor()); 
     System.out.println(bb.getTitle()); 
     System.out.println(bb.getDescription()); 
     System.out.println(bb.getGenre()); 
     System.out.println(bb.getPrice()); 
     System.out.println(bb.getDate()); 

     } 



    } 

    public static void main(String[] args) throws JAXBException { 

      unma(); 
    } 

}  

********** ********** Books.java

import java.util.*; 
import javax.xml.bind.annotation.*; 

@XmlRootElement(name="Books") 
public class Books { 

    List<Book> books; 

    public List<Book> getBooks() { 
     return books; 
    } 

    @XmlElement(name = "Book") 
    public void setBooks(List<Book> books) 
    { 

     this.books = books; 

    } 

} 

************* Book.java ********

import javax.xml.bind.annotation.XmlElement; 
import javax.xml.bind.annotation.XmlRootElement; 
import javax.xml.bind.annotation.XmlType; 

@XmlType(propOrder = { "author", "description","title", "genre","price", "date"}) 
@XmlRootElement(name = "Book") 
public class Book 
{ 
    String author; 
    String description; 
    String title; 
    String genre; 
    String price; 
    String date; 

    public String getAuthor() { 
     return author; 
    } 

    @XmlElement(name = "author") 
    public void setAuthor(String author) 
    { 
     this.author = author; 
    } 



    public String getDescription() { 
     return description; 
    } 

    @XmlElement(name = "description") 
    public void setDescription(String description) 
    { 
     this.description = description; 
    } 

    public String getTitle() { 
     return title; 
    } 

    @XmlElement(name = "title") 
    public void setTitle(String title) 
    { 
     this.title = title; 
    } 

    public String getGenre() { 
     return genre; 
    } 

    @XmlElement(name = "genre") 
    public void setGenre(String genre) 
    { 
     this.genre = genre; 
    } 

    public String getPrice() { 
     return price; 
    } 

    @XmlElement(name = "price") 
    public void setPrice(String price) 
    { 
     this.price = price; 
    } 

    public String getDate() { 
     return date; 
    } 

    @XmlElement(name = "date") 
    public void setDate(String date) 
    { 
     this.date = date; 
    } 

} 

** XML для книги ****

<?xml version="1.0"?> 
    <Books> 
    <Book id="1"> 
     <author>Isaac Asimov</author> 
     <title>Foundation</title> 
     <genre>Science Ficition</genre> 
     <price>164</price> 
     <date>1951-08-21</date> 
     <description>Excellent.</description> 
    </Book> 
    <Book id="2"> 
     <author>Isaac Asimov</author> 
     <title>Foundation and Empire</title> 
     <genre>Science Fiction</genre> 
     <price>79</price> 
     <date>1952-10-12</date> 
     <description>Good.</description> 
    </Book> 

</Books> 
+0

Пытаясь отформатировать ответ, было бы признательно, если бы какой-либо опытный человек сделал это для меня , – user3509208

+0

Большое спасибо @peeskillet. – user3509208

+0

Большое вам спасибо за добрый ответ. я пробовал точно ваш код, но, к сожалению, его не работает, я думаю, его проблема с моим файлом или что-то в этом роде, но чем я скопировал ваш xml-файл и запустил его, он дал мне эту ошибку, исключение в потоке «main» javax.xml.bind.UnmarshalException: неожиданный элемент (uri: "", local: "book"). Ожидаемые элементы <{}book1> \t в com.sun.xml.internal.bind.v2.runtime.unmarshaller.UnmarshallingContext.handleEvent (UnmarshallingContext.java:726) \t в com.sun.xml.internal.bind.v2.runtime. unmarshaller.Loader.reportError (Loader.java:247) \t at – Alex

Смежные вопросы