2015-11-02 6 views
0

Как размонтировать нижний xml с помощью JAXB и заполнить java-объекты.Как размонтировать этот xml с помощью JAXB

Я новичок в этом JAXB. Мне нужно заполнить java-объекты для нескольких клиентов. У меня есть два клиента в списке клиентов, которые нужно преобразовать в java-объект.

аналогично для услуг, указанных в XML тоже ...

<root xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> 
    <customerList><customer><name>ATNT</name><category>Network</category>        
     <country>USA</country><device>7600</device></customer>  
     <customer> 
     <name>cisco</name> 
     <category>Network</category> 
     <country>USA</country> 
     <device>ubr10k</device>  
     </customer> 
    </customerList> 
    <services> 
     <softwareServices> 
     <company>TCS</company> 
     <country>India</country> 
     <clients> 
      <bank>SBI</bank> 
      <insurance>LIC</insurance> 
      <telecom>Ericsson</telecom> 
     </clients>  
     </softwareServices> 
     <softwareServices> 
     <company>Infosys</company> 
     <country>India</country> 
     <clients> 
      <bank>IDBI</bank> 
      <insurance>Lombard</insurance> 
      <telecom>Airtel</telecom> 
     </clients>  
     </softwareServices> 
    </services> 
    </root> 
+5

Что вы пробовали? Где вы застряли? Есть много учебных пособий, которые должны помочь вам начать работу – reto

+0

Я попытался разогнать этот XML-объект и заполнить все объекты клиента из customerList, но я получаю null. предположу, что XML является простым форматом, как содержит один узел клиента сможет получить объект заказчика CISCO Сеть США ubr10k martin

ответ

0

1. использовать .xsd файл (см фрагмент кода SO_customer.xsd ниже)

2. выполнить xjc:

C:\dev\jdk1.6.0_41\bin\xjc -d src SO_customer.xsd 

Это будет ген Оцените классы Java вам нужно

3. маршализацию (см код фрагмента MainClass.java ниже). Это выведет имя первого клиента: "Atnt"

SO_customer.xsd (с XML вы предоставили ...):

<xs:schema attributeFormDefault="unqualified" elementFormDefault="qualified" xmlns:xs="http://www.w3.org/2001/XMLSchema"> 
    <xs:element name="root"> 
    <xs:complexType> 
     <xs:sequence> 
     <xs:element name="customerList"> 
      <xs:complexType> 
      <xs:sequence> 
       <xs:element name="customer" maxOccurs="unbounded" minOccurs="0"> 
       <xs:complexType> 
        <xs:sequence> 
        <xs:element type="xs:string" name="name"/> 
        <xs:element type="xs:string" name="category"/> 
        <xs:element type="xs:string" name="country"/> 
        <xs:element type="xs:string" name="device"/> 
        </xs:sequence> 
       </xs:complexType> 
       </xs:element> 
      </xs:sequence> 
      </xs:complexType> 
     </xs:element> 
     <xs:element name="services"> 
      <xs:complexType> 
      <xs:sequence> 
       <xs:element name="softwareServices" maxOccurs="unbounded" minOccurs="0"> 
       <xs:complexType> 
        <xs:sequence> 
        <xs:element type="xs:string" name="company"/> 
        <xs:element type="xs:string" name="country"/> 
        <xs:element name="clients"> 
         <xs:complexType> 
         <xs:sequence> 
          <xs:element type="xs:string" name="bank"/> 
          <xs:element type="xs:string" name="insurance"/> 
          <xs:element type="xs:string" name="telecom"/> 
         </xs:sequence> 
         </xs:complexType> 
        </xs:element> 
        </xs:sequence> 
       </xs:complexType> 
       </xs:element> 
      </xs:sequence> 
      </xs:complexType> 
     </xs:element> 
     </xs:sequence> 
    </xs:complexType> 
    </xs:element> 
</xs:schema> 

MainClass.java:

package call; 

import generated.Root; 

import java.io.File; 

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

    public class MainClass { 

     public static void main(String[] args) { 
      try { 

       File file = new File("C:\\SO\\src\\input.xml"); 
       JAXBContext jaxbContext = JAXBContext.newInstance(Root.class); 

       Unmarshaller jaxbUnmarshaller = jaxbContext.createUnmarshaller(); 
       Root root = (Root) jaxbUnmarshaller.unmarshal(file); 
       System.out.println(root.getCustomerList().getCustomer().get(0).getName()); 

      } catch (JAXBException e) { 
       e.printStackTrace(); 
      } 
     } 
    } 
+0

Спасибо за своевременную помощь. его рабочий штраф – martin

+0

Добро пожаловать. Не могли бы вы подтвердить ответ? Или дай мне один из тех «поддельных интернет-точек», которые мне нравятся, поместив мой ответ? ;-) –

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