ru_java, posts by tag: xml - LiveJournal (original) (raw)

Программа для преобразования xml в json, версия 2023-07-31

Привет!

Вот программа (swing/java11).

Вы можете скачать её по следующей ссылке:

https://github.com/javadev/underscore-java/releases/download/test/xmltojson.jar

Чтобы запустить программу, выполните следующие действия:
- Скачайте файл по указанной ссылке.
- Откройте командную строку и выполните команду: java -jar xmltojson.jar

Апач. Velocity как генератор...XML???

каменяр, кирка

kamen_jahr

January 29th, 2013

До сих пор, когда необходимо было генерировать XML

файлы

структуры, пользовались либо выводом в поток, если XMLка ну ооочень "проста" (редко), либо вводили JDOM, если структура генерируемого XML "сложнее" (чаще всего). Еще JAXB юзали, кода были нужны преобразования java object<=>XML. И тут поступило рац.(?) предложение, когда очередной проект делали, выкинуть JDOM, который создает структуру XML, и заменить на Апач. Velocity - де Апач. Velocity удобнее ибо яваобъекты есть.Глянул я этот Velocity (ранее дела не имели, если надо было генерировать тот же ява-код, другие методытузлы юали)
Так этим Velocity надо же каждый тег генерировать, как "октывающий" так и "закрывающий"??? И надо темплейт то писать, где куча всяких там скриптпонятий иф, циклы, которые не ясно как дебагить:_/ Не, я понимаю, если код страницы генерить хтмелЭный - Velocity хорош. Но для -XML- по-моему нe удобен....

OXM - Java Object/XML Mapping

apr

magicprinc

November 3rd, 2010

Некоторое время назад проводил опрос: "лучшая низкоуровневая библиотека для работы с XML".
Победил http://xom.nu/ (быстрый легкий; лаконичное, но функциональное API) + знание XPath.

Последнее время требуется просто сохранить объект в XML (строго определенного вида) и прочитать обратно. Делать это на уровне DOM однообразно и скучно.
Решил выбрать и использовать что-нибудь высокоуровневое ~ OXM.
Исследование рынка показало, что есть JAXB, Castor, XMLBeans, JiBX, XStream, simple.sf.net, ваш вариант.
C XStream немного работал, Simple как-то смотрел. Почитал про JAXB.

Вопрос #1: вероятно стоит использовать JAXB (стандарт и вроде неплохой, функциональный), не тормозит, не глючит?

Или же есть конкуренты превосходящие его функциональностью, простотой, скоростью (Simple и JiBX вроде живенькие, например).

Если JAXB то какую реализацию, стандартную-встроенную или другую?

Вопрос #2: некоторые XML, которые хочется отобразить в классы имеют вид: [общий_тег_для_группы_сообщений тип=”конкретный тип сообщения”]общие и частные свойства объекта[/общий_тег_для_группы_сообщений]

Т.е. тег «общий_тег_для_группы_сообщений» реально должен отображаться на целую группу классов, наследуемых от одного родителя.
Как это сделать на JAXB или рекомендуемой вами OXM?

В сети куча вариантов как это сделать для полей/свойств объекта, но не нашел такого для xmlroot объекта.

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

Пример: [request type="send"]...[/request] == SendRequest class, а
[request type="status"]...[/request] == StatusRequest class

SendRequest и StatusRequest наследуются от абстрактного Request, но не содержат поля/свойства type в себе - сам класс наследника определяет этот type.

Вопрос по dom4j и HTML

norton

jacks_alterego

October 7th, 2009

Доброго времени суток всем,
Сам я с XML малознаком, так уж получилось.
Интересует вот какой вопрос - нужно распарсить HTML и повыдергивать из него некоторые данные.
При попытке сделать это через dom4j падают exception которые жалуются на Meta и nbsp (как я понял html который я ему даю не совсем корректно сформирован).
Внимание, уважаемые знатоки: чем парсить HTML чтобы с ним можно было работать посредством xpath без дополнительных плясок с бубном?

Предвосхищая вопросы "а почему бы не сформировать html правильно" отвечаю - приходит он ко мне извне.

UPD: Всем спасибо, использовал TagSoup. Дальше DOM и XPath

Какой Java XML API для обработки "просто XML" (т.е. не сериализации объектов, web сервисов и тд)

apr

magicprinc

August 11th, 2009

Раз пошла такая пьянка, то прошу проголосовать ещё раз.

Я в редких случаях использую SAX, а в остальных XOM.
DOM в чистом виде и dom4j мне не понравились.
А для выбора из JDOM и XOM я написал тест на скорость и потребление памяти.
В моем тесте XOM оказался быстрее и ел меньше памяти.

Поясняю (в ответ на комментарий):
Можно разделить всё API на две группы: SAX и остальные (DOM style).
Если надо прочитать быстро и дернуть пару значений или пробежаться по большому файлу, то SAX рулит.

Какой Java XML API для обработки "просто XML" (т.е. не сериализации объектов, web сервисов, rpc и проч.) Вы используете.

Иное (напишите в комментарии что)

Конечно и jdom и xom используют SAX для чтения дерева в память, т.е. сравнение выглядит не совсем корректным, но оставлено для настоящих программеров, которые отвергают DOM-style API и работают исключительно на низком уровне.

UPD:
Провёл (не претендующее на абсолютную истину) сравнительное тестирование нескольких способов поиска в дереве.
Ручное - перебор дерева "вручную" используя его tree-api. XPath - используя xpath. Результат дается в "поисках в секунду":

Ручной XOM: 625 000XOM XPath: 12 547
XOM XPath (XPath объект получен единожды): 29 154

Ручной JDOM: 322 580
JDOM XPath: 11 037
JDOM XPath (XPath объект получен единожды): 32 460

Ручной JRE DOM: 158 730
JRE DOM XPath: 320
JRE DOM XPath (компилированный): 807

Saxon XPath: 11 641
Saxon XPath (компилированный): 53 191

Т.е. вручную быстрее всего с XOM.
Одноразовый XPath быстрее всего с XOM.
Компилированный XPath быстрее всего в saxon.

one java to many xsd

zlobniyanonim

May 7th, 2009

Привет, уважаемый Олл
возникла такая проблемка: есть entity class, который требуется передавать разным системам
т.к. сам класс очень большой, приходится для каждой системы давать свой view(представлен в xsd)

например: есть поля {а,б,в,....}. {б,в} опциональные.
У нашей системы есть full.xsd(в котором все entities представлены со всеми полями)
Для первой системы класс виден как {а,б}, а для второй как {а,в}, соответсвенно первая получит 1.xsd, а вторая 2.xsd.
существует ли способ создать с помощью jaxb несколько mappings?
1)возможность маршалить полный обьект в "отфильтрованные" xml
2)и наооборот, из "отфильтрованных" xml создать полный обьект(опциональные поля получат default-values)

второе возможно само по себе. берем "отфильтрованный" xml и с помощью контекста, построенного по full.xsd получаем обьект.
первое пока никак не выходит
есть идея попытаться произвести следующее вуду: полный обьект в полный xml по full.xsd context, потом unmarshall по 1.xsd context в "отфильтрованый" обьект и потом уже marshall в "отфильтрованный xml" по 1.xsd context, но это не слишком продуктивно..)
вторая идея : через reflection строит малый обьект из большого(по полям малого) и потом его marshall в "отфильтрованный" xml
поиски по jaxb форумам и гугление ничего путного не принесли.
update: третья идея, предложеная bedrin: маппинг сделать один и попроще, а дальше XSLT

вопрос, есть ли более красивые и стандартные способы производить сиё вуду :)?
update:
Domain to VO mapping by dozer.sourceforge.net/documentation/xmlbeans.html

Spring Framework compile-time configuration check

dair_targ_one

April 30th, 2009

Добрый день!

( Есть AbstractBean и BeanImplCollapse )

Всё это приправлено applicationContext.xml:

`...

<bean id="bean" class="BeanImpl" parent="abstractBean> ...

`

Теперь вопрос: как можно проверить наличие всех values в конфигурации для всех keys, встречающихся в классах-наследниках AbstractBean (типа приведённого Bean) в качестве аргументов к getString() на этапе компиляции при условии, что в качестве аргументов всегда используется константные строки? Или хотя бы в какую сторону в такой ситуации стоит искать?

JAXB: проблема namespace при unmarchalling

gornognom

c0s

September 16th, 2008

уважаемые,

столкнулся со схемой, которая развивается в течение довольно долгого периода, и каждый раз при обновлении меняется также её URI.
поддержку обмена инфомарцией в формате XML по этой схеме я пишу с помощью JAXB и беру, естественно, последнюю версию схемы, однако, в реальной жизни мне для анмаршаллинга могут приходить документы, в которых указан один из URI предыдущих версий.

сейчас это приводит к тому, что при анмаршаллинге более старых XML элементы в коллекции any (есть в этой схеме свалки "всего подряд") не преобразуются к объектам классов, сгенерированных JAXB'ом, хотя обратная совместимость по именам элементов/атрибутов и, как следствие, по набору свойств присутствует (новые версии схемы только добавляют фичи)

хотелось бы понять как без промежуточных преобразований входных документов объяснить JAXB'у, что namespace URI для определённых элементов мне не важен, и подойдёт любой. или такой возможности нет?

UPD: JAXB 2.1.8 RI

JAXB против Apache XML Beans

smalgin

August 10th, 2008

Пытаюсь выбрать XML binding. Есть какие-то причины, по которым можно предпочесть Apache XML Beans, когда в Java уже есть JAXB?