如何将 xml 转换为 java

How to convert xml to java

我正在尝试将 xml 文件转换为 java,我没有这方面的经验。所以有人可以帮助我吗? 下面是我的书 class。

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 文件。`

<?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>

到目前为止,我尝试通过在我的 man class

中创建下面的方法来转换和读取 xml 文件
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();
    }

 }

您的代码有几个问题。

    根据您的 xml ID,
  1. @XMLAttribute 是 id 的正确注释 是书的一个属性,而不是作为作者或描述的元素。
  2. @XMLElement 应该在 setter 方法上而不是在 getter 方法上
  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>