#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.