Не удается возобновить экран, говорит, что я уже подключен?

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

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

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

Но с синтаксическими анализаторами XML вы получаете xpath - что очень похоже на регулярные выражения, но применимо к иерархической информации.

Примерно так:

#!/usr/bin/env perl
use strict;
use warnings;

use XML::Twig;

my $twig = XML::Twig -> parse ( \*DATA );

my $version = $twig -> get_xpath('//item/artifactId[string()="myproject"]/../version',0)->text;
print $version;

__DATA__
<xml>
  <item>
    <artifactId>myproject</artifactId>
    <version>1.14.0-SNAPSHOT</version>
  </item>
</xml>

Надеюсь, вы видите, как работает xpath ? // item находит элемент в любом месте структуры. [string () = запрашивает текстовое содержимое. Вместо этого вы можете сделать что-то вроде [@ someAtt = "fish"] , чтобы проверить атрибут.

Затем мы .. вверх (до элемент ) и получаем элемент версия . Затем получите значение текст .

В качестве единственного советника:

perl -MXML::Twig -0777 -e 'print XML::Twig -> parse ( <> ) -> get_xpath('/item/artifactId[string()="myproject"]/../version',0)->text,"\n"    yourxmlfile.xml

Теперь я предлагаю XML :: Twig , потому что я думаю, что его легче выучить. XML :: LibXML тоже неплох.

Но он распространяется с клубничным Perl в Windows и легко доступен во многих менеджерах пакетов - или из CPAN .

В качестве альтернативы - xmlstarlet должен позволить вам делать то же самое.

168
03.11.2015, 11:15
0 ответов

Теги

Похожие вопросы