2012-06-27 7 views
32

का उपयोग कर xml से जावा ऑब्जेक्ट को कनवर्ट करें मेरे पास निम्न XML है और मुझे इसे जावा ऑब्जेक्ट में कनवर्ट करने की आवश्यकता है।jxb (unmarshal)

<tests> 
    <test-data> 
     <title>BookTitle</title> 
     <book>BookName</book> 
     <count>64018</count> 
     <test-data> 
      <title>Book title1</title> 
      <book>Book Name1</book> 
      <count>5</count> 
     </test-data> 
     <test-data> 
      <title>Book title2</title> 
      <book>Book Name3</book> 
      <count>5</count> 
     </test-data> 
     <test-data> 
      <title>Book title3</title> 
      <book>Book Name3</book> 
      <count>4</count> 
     </test-data> 
    </test-data> 
</tests> 

मुझे यकीन है कि जब मैं JAXB का उपयोग यह कन्वर्ट करने के लिए क्या मेरी POJO हो जाएगा नहीं कर रहा हूँ।

मैं मेरी समझ के अनुसार निम्नलिखित POJOs बनाया:

public class Tests { 

    TestData testData; 

    public TestData getTestData() { 
     return testData; 
    } 

    public void setTestData(TestData testData) { 
     this.testData = testData; 
    } 
} 

public class TestData { 
    String title; 
    String book; 
    String count; 

    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; 
    } 
} 

कृपया मेरी मदद करो। अग्रिम धन्यवाद।

+2

आप निश्चित नहीं हैं, ठीक है। लेकिन क्या आपने कुछ कोशिश की है? अगर आपके पास पहले से कुछ किया गया है तो मदद करना आसान है। – buc

+2

यदि आपके पास इस एक्सएमएल के लिए एक्सएसडी है, तो आप एक्सेलस जैसे आईडीई के साथ जेएक्सबी एनोटेटेड क्लासेस जेनरेट कर सकते हैं। –

उत्तर

116

टेस्ट

Tests वर्ग पर हम एक @XmlRootElement एनोटेशन जोड़ देगा। ऐसा करने से आपके JAXB कार्यान्वयन को पता चलेगा कि जब कोई दस्तावेज़ इस तत्व से शुरू होता है तो उसे इस वर्ग को तुरंत चालू करना चाहिए। JAXB अपवाद द्वारा कॉन्फ़िगरेशन है, इसका मतलब है कि आपको केवल एनोटेशन जोड़ने की आवश्यकता है जहां आपका मैपिंग डिफ़ॉल्ट से अलग है। चूंकि testData संपत्ति डिफ़ॉल्ट मैपिंग से अलग है, इसलिए हम @XmlElement एनोटेशन का उपयोग करेंगे। आप नीचे दिए गए ट्यूटोरियल लिए उपयोगी हो सकते:। 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

इस वर्ग मैं जिस क्रम में तत्वों में आदेश दिया जाना चाहिए निर्दिष्ट करने के लिए @XmlType एनोटेशन का इस्तेमाल किया पर मैं एक testData संपत्ति कहा कि गायब होने लगते थे। मैंने कक्षा में उसी कारण से @XmlElement एनोटेशन का भी उपयोग किया।

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; 
    } 
} 

डेमो

नीचे कैसे JAXB API का उपयोग करने (unmarshal) एक्सएमएल वापस एक्सएमएल के लिए पढ़ने के लिए और अपने डोमेन मॉडल पॉप्युलेट और फिर (मार्शल) लिखने परिणाम का एक उदाहरण है।

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); 
    } 

} 
+24

यदि आप इसे पढ़ते हैं तो आपको यह जवाब स्वीकार करना चाहिए। –

+0

बिना किसी स्कीमा के जावा ऑब्जेक्ट में एक्सएमरहॉलिंग एक्सएमएल - प्रतिबिंब का उपयोग करता है? यदि हां, Unmarshalling में प्रतिबिंब द्वारा भूमिका क्या भूमिका निभाती है? – Viswa

संबंधित मुद्दे