Как скопировать и отредактировать файл XML в Perl? - PullRequest
1 голос
/ 23 февраля 2011

Я копирую содержимое файла XML в другой файл XML, для которого это последняя строка:

</references></resume></xpath>  

Я должен написать только до </resume>, а не </xpath>.
Как этого добиться в Perl? Можно ли использовать регулярное выражение?

Это команда, которую я использую для печати вывода:

$out_content .= "$_";

Ответы [ 2 ]

3 голосов
/ 23 февраля 2011

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

Например, XML :: Twig поставляется с инструментами xml_split и xml_merge , которые легко делают то, что вы хотите.

1 голос
/ 23 февраля 2011

Есть 2 способа сделать это:

  • Плохой, но быстрый способ: используйте регулярное выражение

 $outContent = $contentOfOldXmlFile;
 $outContent =~ s#^.*<xpath>((.|\n)*)</xpath>$#$1#;
  • Правильный путь: используйте XML::DOM библиотека

use XML::DOM;
use XML::XQL; 
use XML::XQL::DOM; 

eval {
  my $xml=new XML::DOM::Parser->parsefile($yourFilename);
  my $outContent = "";
  for($xml->xql(qq(//resume))) {
    $outContent .= $_->toString();
  }
  $xml->dispose();
};
print "ERROR:$@\n" if $@;

А затем у вас есть новый контент в $outContent, который вы можете распечатать или записать в нужный файл.

Желательно использовать XML::DOM API для получения необходимого контента (с $node->toString()) вместо объединения строк.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...