Работа с XML,при помощи JAXB

381
01 февраля 2018, 18:07

Есть такой XML

<apartment>
        <area total="67.60" heating="65.00"/>
</apartment>

Незнаю как мне правильно указать total и heating. Для Area нужно создавать отдельный класс? Или можно как то иначе?

Answer 1

Всё очень просто. Здесь можно сгенерить XSD по вашему XML. Затем выполняем команду xjc ваш_файл.xsd в результате чего получите два файла Appartment.java и ObjectFactory.java

Appartment.java

// Этот файл создан с помощью архитектура JavaTM для реализации примера XML Binding(JAXB), v2.2.8-b130911.1802 
//  См. http://java.sun.com/xml/jaxb 
// Любые изменения этого файла будут потеряны 
// после повторной компиляции исходной схемы. 
// Время создания: гггг.ММ.дд в чч:мм:сс PM MSK 
//

package generated;
import java.math.BigDecimal;
import javax.xml.bind.annotation.XmlAccessType;
import javax.xml.bind.annotation.XmlAccessorType;
import javax.xml.bind.annotation.XmlAttribute;
import javax.xml.bind.annotation.XmlElement;
import javax.xml.bind.annotation.XmlRootElement;
import javax.xml.bind.annotation.XmlType;

/**
 * 

Класс Java для anonymous complex type. * *

В следующем фрагменте схемы указано ожидаемое содержимое данного класса. * *

 * <complexType>
 *   <complexContent>
 *     <restriction base="{http://www.w3.org/2001/XMLSchema}anyType">
 *       <sequence>
 *         <element name="area">
 *           <complexType>
 *             <complexContent>
 *               <restriction base="{http://www.w3.org/2001/XMLSchema}anyType">
 *                 <attribute name="total" type="{http://www.w3.org/2001/XMLSchema}decimal" />
 *                 <attribute name="heating" type="{http://www.w3.org/2001/XMLSchema}decimal" />
 *               </restriction>
 *             </complexContent>
 *           </complexType>
 *         </element>
 *       </sequence>
 *     </restriction>
 *   </complexContent>
 * </complexType>
 * 
* * */ @XmlAccessorType(XmlAccessType.FIELD) @XmlType(name = "", propOrder = { "area" }) @XmlRootElement(name = "apartment") public class Apartment { @XmlElement(required = true) protected Apartment.Area area; /** * Получает значение свойства area. * * @return * possible object is * {@link Apartment.Area } * */ public Apartment.Area getArea() { return area; } /** * Задает значение свойства area. * * @param value * allowed object is * {@link Apartment.Area } * */ public void setArea(Apartment.Area value) { this.area = value; } /** *

Класс Java для anonymous complex type. * *

В следующем фрагменте схемы указано ожидаемое содержимое данного класса. * *

     * <complexType>
     *   <complexContent>
     *     <restriction base="{http://www.w3.org/2001/XMLSchema}anyType">
     *       <attribute name="total" type="{http://www.w3.org/2001/XMLSchema}decimal" />
     *       <attribute name="heating" type="{http://www.w3.org/2001/XMLSchema}decimal" />
     *     </restriction>
     *   </complexContent>
     * </complexType>
     * 
* * */ @XmlAccessorType(XmlAccessType.FIELD) @XmlType(name = "") public static class Area { @XmlAttribute(name = "total") protected BigDecimal total; @XmlAttribute(name = "heating") protected BigDecimal heating; /** * Получает значение свойства total. * * @return * possible object is * {@link BigDecimal } * */ public BigDecimal getTotal() { return total; } /** * Задает значение свойства total. * * @param value * allowed object is * {@link BigDecimal } * */ public void setTotal(BigDecimal value) { this.total = value; } /** * Получает значение свойства heating. * * @return * possible object is * {@link BigDecimal } * */ public BigDecimal getHeating() { return heating; } /** * Задает значение свойства heating. * * @param value * allowed object is * {@link BigDecimal } * */ public void setHeating(BigDecimal value) { this.heating = value; } } }

ObjectFactory.java

// Этот файл создан с помощью архитектура JavaTM для реализации примера XML Binding(JAXB), v2.2.8-b130911.1802 
//  См. http://java.sun.com/xml/jaxb 
// Любые изменения этого файла будут потеряны после повторной компиляции исходной схемы. 
// Время создания: гггг.ММ.дд в чч:мм:сс PM MSK 
//

package generated;
import javax.xml.bind.annotation.XmlRegistry;

/**
 * This object contains factory methods for each 
 * Java content interface and Java element interface 
 * generated in the generated package. 
 * 

An ObjectFactory allows you to programatically * construct new instances of the Java representation * for XML content. The Java representation of XML * content can consist of schema derived interfaces * and classes representing the binding of schema * type definitions, element declarations and model * groups. Factory methods for each of these are * provided in this class. * */ @XmlRegistry public class ObjectFactory { /** * Create a new ObjectFactory that can be used to create * new instances of schema derived classes for package: generated * */ public ObjectFactory() { } /** * Create an instance of {@link Apartment } * */ public Apartment createApartment() { return new Apartment(); } /** * Create an instance of {@link Apartment.Area } * */ public Apartment.Area createApartmentArea() { return new Apartment.Area(); } }

Answer 2

Скорее всего придется делать два класса: первый будет @XmlRootObject и будет содержать ссылку на второй, где будет указано total и heating

READ ALSO
Android область видимости и взаимодействия

Android область видимости и взаимодействия

У меня есть одна функция которая работает как сервис, но она не срабатывает, я не могу понять почемуВот код функции:

234
Как протестировать приватный Injected обьект?

Как протестировать приватный Injected обьект?

Как протестировать приватный Injected обьект?

323
JOIN на уровне базы данных или на уровне приложения?

JOIN на уровне базы данных или на уровне приложения?

Имется две таблицы: Судья и СоревнованиеОдно соревнование судят несколько судей, один и тот же судья может судить несколько соревнований

244
Как устроена иерархия классов и методов

Как устроена иерархия классов и методов

Учу ООП java, возник вопрос

242