2012-06-08 3 views
1

Я дешифровал XML-данные, используя JAXB (и немного Saxon для XSLT). В моем XML-документе у меня есть значение строки даты.XMLAdapter: Конфигурируемый формат даты

Я провел некоторое исследование и экспериментировал с XMLAdapter и @XMLJavaTypeAdapter. Я нашел полезный Q & A на StackOverflow здесь: jaxb unmarshal timestamp. Решение, описанное там с использованием SimpleDateFormat, похоже, хорошо работает.

Вот моя проблема: формат строки даты в XML варьируется от документа к документу. Он может быть в другом формате даты каждый раз. В текущей системе (которую я заменяю на все эти манипуляции с XML) в форматах базы данных есть форматы дат, которые извлекаются и применяются при анализе XML-документа. Вручную. Построчно. (Теперь вы видите, почему я заменить его с JAXB, Иш!)

Так что вопрос будет: Как бы я изменить из строки формата даты, подаваемый в SimpleDateFormat в XMLAdapter для различных документов? Возможно ли такое? Неужели я обречен на чтение строки даты в виде строки, а затем преобразование ее в дату где-то еще позже?

Редактировать: Я просто собирался удалить этот вопрос, но он встал на голосование, поэтому, я думаю, я напишу правильный ответ на вопрос о том, что я сделал. Я собираюсь отложить принятие моего собственного ответа на некоторое время, если у кого-то есть понимание, которое приведет к еще лучшему ответу.

+0

Было бы полезно, если бы вы предоставили образцы разных типов, с которыми вы сталкиваетесь. Предполагая, что это стандартный набор вариаций, должно быть возможно написать интеллектуальный парсер, который может обрабатывать разные форматы. –

+0

- это форматы, привязанные к определенным элементам, или же один и тот же элемент имеет разные форматы? – jtahlborn

+0

Один и тот же элемент может иметь разные форматы дат. –

ответ

0

Вот что я в конечном итоге происходит с: Я применил точное найденное решение в Q & А я связан в моем вопросе, найти здесь: jaxb unmarshal timestamp.

Возможно, вы думаете: «Это, похоже, оставит этого парня с той же проблемой, что и у него изначально. У него все еще есть статическая строка формата даты в его объекте SimpleDateFormat, но его строки даты по-прежнему имеют переменный формат! ничего не решил! Какой идиот!

Вот мое решение: я уже применяю XSLT к своему XML-документу; У меня есть другой XSLT для каждого типа документа XML. Поэтому я собираюсь взять XSLT, который у меня уже есть (должен), и добавить в него функциональность, чтобы преобразовать строку даты в тот же формат даты, что и указанный в моем SimpleDateFormat объекте в моем XMLAdapter.

Ta da! Мне сейчас не нужно настраивать разъем. Моя конфигурация присуща XSLT I уже (и всегда), прежде чем я попытаюсь ее отключить.

0

Вы можете использовать XmlAdapter для обработки формата даты. Поскольку форматы даты отличаются от doc к doc, вы можете воспользоваться указанием инициализированного экземпляра адаптера на Unmarshaller. Таким образом, вы можете установить формат даты, соответствующий документу, который вы хотите развязать.

Пример

+0

Ваше решение будет работать, но для выполнения моего маршалинга и разворачивания я вызываю метод в классе утилиты, который используется по всей системе. Я либо должен был бы изменить подпись метода, чтобы принять переменное число XMLAdapters, либо перегрузить метод с той версией, которая занимает один. Тогда мне пришлось бы добавить логику в этот метод, чтобы проверить, был ли предоставлен XMLAdapter, и если да, присоедините его и т. Д. –