Извлечение значений из XML-файла с использованием JAXB

1

Я использую JAXB для управления данными из XML файла и вставки этих значений в базу данных. У меня проблема с извлечением данных из определенного тега XML. Этот тег XML содержит буквенно-цифровые значения, но около 95% (если не 99%) того времени, значения, которые он содержит, являются целыми числами. Поэтому я рассматриваю эти значения как String.

<reference>12345</reference>

Более того, соответствующий столбец в базе данных является varchar. Я создал файл XSD убедившись, что reference на элемент имеет тип xsd:string

<xs:element name="reference" type="xs:string" />

Проблема в том, что я могу иметь XML файл, где некоторые ссылки имеют такой формат:

<reference>012345</reference>
<reference>0012345</reference>

Извлечение значения этих ссылок удаляет ведущие нули, дающие мне 12345 в качестве результирующего значения. Я не понимаю, почему. Я чувствую, что JAXB обрабатывает значения как целые числа.

Как я могу получить правильные значения?

Изменить:

Здесь соответствующий POJO @XmlAccessorType (XmlAccessType.FIELD) @XmlType (name = "", propOrder = {"referenceOrDescriptionOrEnseignes"}) public static class Program {

@XmlElementRefs({

    @XmlElementRef(name = "reference", type = JAXBElement.class, required = false),
    /** other @XmlElementRef  */
})
protected List<JAXBElement<?>> referenceOrDescriptionOrEnseignes;

Самое забавное, что в методе get вышеупомянутой переменной JAXB указывает объекты, которые разрешены к списку. Разрешены только String и другие POJO-объекты, созданные JAXB с использованием файлов XSD. Нет упоминания о допустимых Integers.

/**
 * Gets the value of the referenceOrDescriptionOrEnseignes property.
 * 
 * <p>
 * This accessor method returns a reference to the live list,
 * not a snapshot. Therefore any modification you make to the
 * returned list will be present inside the JAXB object.
 * This is why there is not a <CODE>set</CODE> method for the referenceOrDescriptionOrEnseignes property.
 * 
 * <p>
 * For example, to add a new item, do as follows:
 * <pre>
 *    getReferenceOrDescriptionOrEnseignes().add(newItem);
 * </pre>
 * 
 * 
 * <p>
 * Objects of the following type(s) are allowed in the list 
 * {@link JAXBElement }{@code <}{@link String }{@code >}
 *  ...
 *  ...
 *  ...
 */

public List<JAXBElement<?>> getReferenceOrDescriptionOrEnseignes() {
    if (referenceOrDescriptionOrEnseignes == null) {
        referenceOrDescriptionOrEnseignes = new ArrayList<JAXBElement<?>>();
    }
    return this.referenceOrDescriptionOrEnseignes;
}

Необычно, когда я печатаю тип класса ссылочного элемента, он печатает Integer.

Благодарю!

  • 0
    Как выглядит соответствующий POJO, содержащий элемент reference ?
  • 0
    @Petter: Проверьте мой отредактированный вопрос.
Показать ещё 6 комментариев
Теги:
jaxb
xsd

1 ответ

0

Не могли бы вы попытаться распечатать это значение перед вставкой в базу данных.

Перекрестите свой POJO.

  • 0
    Да, я распечатал значения, и они были без ведущих нулей. Я отредактировал свой вопрос, чтобы добавить POJO.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню