convert xml to java object using jaxb (unmarshal)

前端 未结 1 1524
滥情空心
滥情空心 2020-11-27 04:30

I have the following XML and I need to convert it into a java object.


     
         BookTitle 
            


        
相关标签:
1条回答
  • 2020-11-27 04:56

    Tests

    On the Tests class we will add an @XmlRootElement annotation. Doing this will let your JAXB implementation know that when a document starts with this element that it should instantiate this class. JAXB is configuration by exception, this means you only need to add annotations where your mapping differs from the default. Since the testData property differs from the default mapping we will use the @XmlElement annotation. You may find the following tutorial helpful: http://wiki.eclipse.org/EclipseLink/Examples/MOXy/GettingStarted

    package forum11221136;
    
    import javax.xml.bind.annotation.*;
    
    @XmlRootElement
    public class Tests {
    
        TestData testData;
    
        @XmlElement(name="test-data")
        public TestData getTestData() {
            return testData;
        }
    
        public void setTestData(TestData testData) {
            this.testData = testData;
        }
    
    }
    

    TestData

    On this class I used the @XmlType annotation to specify the order in which the elements should be ordered in. I added a testData property that appeared to be missing. I also used an @XmlElement annotation for the same reason as in the Tests class.

    package forum11221136;
    
    import java.util.List;
    import javax.xml.bind.annotation.*;
    
    @XmlType(propOrder={"title", "book", "count", "testData"})
    public class TestData {
        String title;
        String book;
        String count;
        List<TestData> testData;
    
        public String getTitle() {
            return title;
        }
        public void setTitle(String title) {
            this.title = title;
        }
        public String getBook() {
            return book;
        }
        public void setBook(String book) {
            this.book = book;
        }
        public String getCount() {
            return count;
        }
        public void setCount(String count) {
            this.count = count;
        }
        @XmlElement(name="test-data")
        public List<TestData> getTestData() {
            return testData;
        }
        public void setTestData(List<TestData> testData) {
            this.testData = testData;
        }
    }
    

    Demo

    Below is an example of how to use the JAXB APIs to read (unmarshal) the XML and populate your domain model and then write (marshal) the result back to XML.

    package forum11221136;
    
    import java.io.File;
    import javax.xml.bind.*;
    
    public class Demo {
    
        public static void main(String[] args) throws Exception {
            JAXBContext jc = JAXBContext.newInstance(Tests.class);
    
            Unmarshaller unmarshaller = jc.createUnmarshaller();
            File xml = new File("src/forum11221136/input.xml");
            Tests tests = (Tests) unmarshaller.unmarshal(xml);
    
            Marshaller marshaller = jc.createMarshaller();
            marshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true);
            marshaller.marshal(tests, System.out);
        }
    
    }
    
    0 讨论(0)
提交回复
热议问题