Каков самый дешевый кросс-платформенный подход к анализу XML с использованием ksh?

#xml #ksh

Вопрос:

Нужно проанализировать некоторый базовый XML (один корневой элемент, 3-4 подэлемента, 1-3 атрибута каждый) из сценария ksh (в идеале придерживайтесь ksh, учитывая, что сценарий уже существует, и он просто пытается прочитать некоторую дополнительную конфигурацию, созданную в XML другой программой).

Я знаю, что могу использовать sed и выполнять сопоставление шаблонов, но это не является надежным, учитывая, что входной XML может измениться, а атрибуты могут дублироваться в различных подэлементах (или новых подэлементах).

До сих пор я подумываю об использовании XSLT против XML для извлечения нескольких атрибутов (для определенных элементов), о которых заботится сценарий ksh, в виде отдельных полей. Я могу использовать Oracle для этого, учитывая, что мы являемся продуктом, управляемым БД, и Oracle всегда будет устанавливаться в наших системах, но это кажется немного жестким.

Любой другой безопасный подход для извлечения определенных атрибутов из входного XML кросс-платформенным способом, который не требует доступа к стороннему анализатору/преобразователю?

Ответ №1:

Возможно, вам захочется взглянуть на эту чистую реализацию bash, если так важно сохранить все это в сценарии оболочки.

Тем не менее, другие языки сценариев, такие как Python и Perl, также очень переносимы и значительно облегчат вашу жизнь. Модуль XML::Twig Perl, например, поставляется со сценарием конечного пользователя под названием «xml_grep», которому уже можно передать --text_only возможность извлечения только текста узла, найденного в результате сложного поиска. Не должно быть намного сложнее изменить его, чтобы он также возвращал указанный атрибут.

Ответ №2:

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

Ответ №3:

Не могу сделать это полностью на ksh, но попробуйте python xml?

Если вам нужен легкий вес, вы можете попробовать libxml2 и небольшую программу на языке Си.

Ответ №4:

Вместо того, чтобы использовать CSV для синтаксического анализа, это не только упростит логику, но и легко приведет к преобразованию из xls в csv.