2015-12-22 1 views
0

Я пытаюсь создать скрипт в Unix для разбора вложенного XML. Пример ниже:Простейший вложенный XML-анализ в AIX

<?xml version="1.0" encoding="UTF-8" standalone="yes"?> 
<deployments> 
    <appName>apptest</appName> 
    <envVariable>app</envVariable> 
    <fileSourceFolder>/sourceTest</fileSourceFolder> 
    <fileBackupFolder>/testbackup</fileBackupFolder> 
    <requireRestart>false</requireRestart> 
    <restartCommandPath>bin</restartCommandPath> 
    <deployment-files> 
     <deployment-file> 
      <deploymentFolder>deployment-folder</deploymentFolder> 
      <fileName>test-file</fileName> 
     </deployment-file> 
    </deployment-files> 
    <restart-commands> 
     <restart-command> 
      <commandName>./appstop</commandName> 
     </restart-command> 
     <restart-command> 
      <commandName>./appstart</commandName> 
     </restart-command> 
    </restart-commands> 
</deployments> 

мне нужно перебирать развертывания-файлов и рестарта-команды элементов. Я прочитал об использовании Perl, а установленная версия - 5.8.8. Однако я не могу использовать TWIG и другие материалы XML в perl из-за отсутствия библиотек. Я читал о других вещах, также как xml_grep, xmllint и т. Д., Но они не установлены на используемом компьютере, и я не могу вручную установить их или даже запросить для него из-за множества ограничений.

Я уже пробовал использовать XML :: Простой пример на http://interoperating.info/courses/perl4data/node/26, но все равно ничего хорошего.

Просьба сообщить, как создать простейший скрипт perl или shell для этого и, пожалуйста, укажите ссылки. Я все еще новичок в скрипте оболочки, и я только начал исследовать perl вчера, поэтому я буду благодарен за вашу помощь. Спасибо.

+0

Вы пробовали что-нибудь от себя? – serenesat

+0

Да, я пробовал много вещей из Интернета. Я попытался изменить те, которые соответствуют моим потребностям, но по-прежнему не работает для моего требования. Я в основном новичок в сценарии оболочки, и вчера я просто попробовал perl, поэтому мне действительно нужна помощь. Большое спасибо за ваше терпение заранее – NothingBox

+0

Можете ли вы опубликовать по крайней мере одну вещь, которая показывает ваши усилия? – serenesat

ответ

1

Посмотрите, я знаю, вы сказали: «Я не могу установить вещи», но проблема в том, что вы пытаетесь разобрать XML без парсера, и вы используете 7-летнюю версию perl это конец жизни. Perl 5.8.8 is end of life, and released in 2008.

Это не путь к хорошему решению, однако старайся - использовать анализатор, и это становится тривиальным просто:

#!/usr/bin/env perl 
use strict; 
use warnings; 
use XML::Twig; 

my $twig = XML::Twig -> new -> parse (\*DATA); 
foreach my $deployment_files ($twig -> get_xpath ('//deployment-file')) { 
    print $deployment_files -> first_child_text('deploymentFolder'), " => "; 
    print $deployment_files -> first_child_text('fileName'); 
    print "\n"; 
} 

foreach my $restart_command ($twig -> get_xpath ('//restart-command/commandName')) { 
    print $restart_command -> text,"\n"; 
} 

__DATA__ 
<?xml version="1.0" encoding="UTF-8" standalone="yes"?> 
<deployments> 
    <appName>apptest</appName> 
    <envVariable>app</envVariable> 
    <fileSourceFolder>/sourceTest</fileSourceFolder> 
    <fileBackupFolder>/testbackup</fileBackupFolder> 
    <requireRestart>false</requireRestart> 
    <restartCommandPath>bin</restartCommandPath> 
    <deployment-files> 
     <deployment-file> 
      <deploymentFolder>deployment-folder</deploymentFolder> 
      <fileName>test-file</fileName> 
     </deployment-file> 
    </deployment-files> 
    <restart-commands> 
     <restart-command> 
      <commandName>./appstop</commandName> 
     </restart-command> 
     <restart-command> 
      <commandName>./appstart</commandName> 
     </restart-command> 
    </restart-commands> 
</deployments> 

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

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

+0

Я пробовал использовать Twig, но я всегда встречаюсь Невозможно найти XML/Twig.pm в @INC ошибке. Первоначальный план - предоставить любой скрипт, который мы создаем для команды развертывания, для автоматизации копирования/резервного копирования файлов и перезапуска приложения. Если для этого необходимы дополнительные библиотеки (например, библиотеки парсеров Xml), это будет проходить сначала по серии запросов и объяснению. Mgmt очень строг при любых модификациях в prod-серверах. В любом случае, я все равно попытаюсь сделать все возможное на своей тестовой машине и надеюсь, что это будет разрешено реализовать на prod. Большое спасибо за помощь. – NothingBox

+0

Управление изменениями контролирует изменение. Хорошо. У вас есть изменения и повод сделать это. Речь идет о создании повторяемого поддерживаемого кода - это причина для изменения. – Sobrique

+0

Спасибо @Sobrique. :) – NothingBox

Смежные вопросы