LINUX.ORG.RU

xml порядок следования атрибутов в теге

 , ,


0

1

Организация, принимающая файлы в формате xml, выдвинула требование об обязательном порядке следования атрибутов в теге. Наша заказная система на Java формирует список атрибутов в алфавитном порядке.
Правильно ли поступили эти ... ?

Придется переформатировать файл в своей программе.
Есть ли такие проблемы при обработке на Perl?

★★

Последнее исправление: WinLin2 (всего исправлений: 1)
Ответ на: комментарий от izzholtik

В слабых IoTинах, у которых тупо нет памяти на сохранение ответа сервера и стоит потоковый парсер, дёргающий по мере вычитывания JSON'a стейт машину, требования к порядку следования - обычная ситуация

Слабые не иотины, а мозги у писателей такого кода. Читай себе в потоке посимвольно и всё. Элемент приехал или атрибут элемента или новое поле в жсоне началось — нет разницы, один хрен создаёшь внутреннее представление элемента и куда-то там его складываешь.

deep-purple ★★★★★
()

Правильно ли поступили эти … ?

Нет, неправильно. Да, они …

XML не гарантирует порядок следования атрибутов, а парсер не должен делать каких-либо предположений на этот счёт. Атрибуты — неупорядочены. Так говорит Заратустра спецификация XML 1.0.

Да, если организацию не удастся переубедить, придётся лопать вручную - либо свой формирователь XML писать, либо конвертор из сгенерённого файла. И писать руками, вряд ли такое наркоманство присутствует в известных инструментах.

hobbit ★★★★★
()
Последнее исправление: hobbit (всего исправлений: 1)
Ответ на: комментарий от fornlr

Вроде требование ничего не нарушает.

Нарушает.

hobbit ★★★★★
()
Ответ на: комментарий от hebiro8709

Ты лучше по ссылке посмотри — там есть ссылки про нормальзацию хмл. Так, в целом, они как-бы сами не уверены, нужно ли определять порядок атрибутов или нет. И вот тут ещё скинули, тоже прикол: https://dst.lbl.gov/~ksb/Scratch/XMLC14N.html

deep-purple ★★★★★
()
Ответ на: комментарий от hebiro8709

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

Legioner ★★★★★
()

Удаки, чего тут скажешь. Разве что «спасибо» за то, что не требуют выравнивания тегов по восьми байтам.

Miguel ★★★★★
()

Сталкивался с подобным для json, когда принимающая система требовала определенный порядок полей. Решилось при помощи jackson

@JsonPropertyOrder({ "Command", "e_info", "UserInfo", "TextMessage", "IsConfirmation", "MessageId" })
public class TcmTextMessage extends TcmBase {
    public String Command;
    public String e_info;
    public String UserInfo;
    public String TextMessage;
...
man-from-36
()
Ответ на: комментарий от hobbit

парсер может бить и не должен, но ска делает потому что его скорее всего запилили с помощью strchr и sscanf. и тут надо просто напрячься и сделать.

«если не удастся переубедить» - маловероятно что они поехавшие дебилы, и скорее всего у них действительно софтина кривая. причем не факт что они писали. поэтому убеждать их бесполезно, надо убеждать софтину.

самое простое я предложил - regex, скобки и пересовывание.

salozar
()
Ответ на: комментарий от Miguel

Разве что «спасибо» за то, что не требуют выравнивания тегов по восьми байтам.

Вот зачем ты написал это, вдруг люди из той организации прямо сейчас читают ЛОР?

У меня была история. Не про 8 байт, но похожая. Я парсил файл *.udx, это телефонная книга кнопочных телефонов Philips Xenium (не всех, правда). Внутри это XML, одним из полей которого является… длина самого этого XML-файла. Чтобы установка этого поля не влияла на длину, оно представлено как строка из 10 символов (берётся строковое значение длины файла и добивается до 10 символов пробелами). Подозреваю, что сделано это, чтобы упростить внутрителефонный XML-парсер…

hobbit ★★★★★
()
Ответ на: комментарий от hobbit

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

salozar
()
Ответ на: комментарий от deep-purple

Я ошибаюсь, или раньше на твоей аватарке глаз не было?
(Да, я включил отображение аватарок после долгой-долгой зимы паузы.)

hobbit ★★★★★
()
Последнее исправление: hobbit (всего исправлений: 2)
Ответ на: комментарий от hobbit

XML не гарантирует порядок следования атрибутов, а парсер не должен делать каких-либо предположений на этот счёт. Атрибуты — неупорядочены. Так говорит Заратустра спецификация XML 1.0.

Правильно конечно, но в чем проблема поместить значения атрибутов в определенном порядке.

У меня алгоритм есть, которому в качестве параметра указывается путь к директории.
Алгоритм в этой и подчиненных директориях производит анализ xml /определенного типа/ и на их основе определяет формирует метаданные
обо всех узлах и порядке следования узлов и атрибутов в них.

Зачем такой алгоритм создал?

Решил сделать возможность создания mxl /для 1С/ на основании xml FastReport.
Но мануала, который дотошно рассказал о наличии атрибутов в тех или иных типах узлов нет.
Теперь такая и подобные этой задачи решаются

Одним движением руки, ...

А у народа проблема xml создать с заданным порядком следования узлов и атрибутов …

Ну и ну!

Владимир

anonymous
()
Ответ на: комментарий от anonymous

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

В fr3 и frx набор атрибутов в подобных узлах может быть разным.

Да собственно самое интересное и не рассказал

В другой раз ...

Владимир

anonymous
()
Ответ на: комментарий от anonymous

«О сколько нам открытий, …»

Сегодня ошибся при copy/paste команды

cd "K:\1CBASA\Для тестов\-- Тест mxl\

и все ok!

Даже так работает

cd """""""""""""""""""""""K:\1CBASA\Для тестов\-- Тест mxl\

PS: А вывод из этого примера и многих иных прост …

Владимир

anonymous
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.