Perl + DOM + использовать XML :: LibXML +, как удалить заголовок версии XML из файла XML? с DOM - PullRequest
2 голосов
/ 13 июля 2010

Я создаю следующий XML-файл, используя скрипт perl (показывающий вниз), используя XML :: LibXML:

 more test.xml 

 <?xml version="1.0"?>
 <books>
 <computer/>
 </books>

Мой вопрос: как удалить «заголовок версии xml»:

      <?xml version="1.0"?>

из файла test.xml?С командами DOM в сценарии perl?

, чтобы получить только следующие строки в файле text.xml:

 <books>
 <computer/>
 </books>

Yael

#

скрипт perl:

#!/usr/bin/perl

use strict;
use warnings;
use XML::LibXML;

my $doc  = XML::LibXML::Document->new;  
my $root = $doc->createElement('books');
$doc->setDocumentElement($root);

my $computer = $doc->createElement('computer');
$root->appendChild($computer);
$doc->toFile('/var/tmp/test.xml'); 

Ответы [ 2 ]

3 голосов
/ 13 июля 2010

Хорошо, что касается моего предыдущего комментария, я теперь нашел решение.

Кажется, toFile обходит $skipXMLDeclaration, тогда как toString нет.Итак, работает следующее:

$XML::LibXML::skipXMLDeclaration = 1;

my $doc  = XML::LibXML::Document->new;
# create your document

print $doc->toString;

Недостатком (очень маленьким) является то, что вы должны написать файл самостоятельно.

0 голосов
/ 13 марта 2019

Увы, проблема становится намного более серьезной, когда у вас есть вход UTF-8.

$ cat x
#!/usr/bin/perl
use strict;
use warnings FATAL => 'all';
use XML::LibXML;
local $XML::LibXML::skipXMLDeclaration = 0;
if (pop) {
    binmode STDOUT, ":utf8";
    $XML::LibXML::skipXMLDeclaration = 1;
}
my $doc = XML::LibXML::Document->new( '1.0', "UTF-8" );
my $P   = $doc->createElement('P');
my $Q   = $doc->createElement('Q');
$P->appendText("中文");
$Q->appendChild($P);
$doc->setDocumentElement($Q);
print $doc->toString(1);
$ ./x 0
<?xml version="1.0" encoding="UTF-8"?>
<Q>
  <P>中文</P>
</Q>
$ ./x 1; echo
<Q><P>中文</P></Q>
$ ./x 0 |fgrep -v \?xml
<Q>
  <P>中文</P>
</Q>

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

Поэтому я прихожу к выводу, что единственный верный ответ - это передать вывод на fgrep -v \?xml!

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