Eu escrevi um programa usando XML::LibXML do perl
Ele cria um XML::LibXML usando load_xml().
Fiquei surpreso ao ver que não precisa de uma chamada para new().
Quando é necessária uma chamada para new()?
Aqui está o código que surpreendentemente (para mim) funciona:
#!/usr/bin/env perl
use 5.020;
use warnings;
use XML::LibXML;
#the input xml
my $inputstr = <<XML;
<a>
<b class="type1">some type 1 data</b>
<b class="type2">some type 2 data</b>
<b class="type3">some type 3 data</b>
<b class="type4">some type 4 data</b>
<b notaclass="type1">don't change this</b>
<c class="type1">don't change this either</c>
</a>
XML
my $dom = XML::LibXML->load_xml(
string => $inputstr
);
say $dom->toString();
XML::LibXML
usa um estilo onde os métodos funcionam como métodos de objeto e de classe. Isto é por conveniência. Se você chamá-loXML::LibXML->load_xml
, ele criará um objeto analisador para você, configurará-o usando seus argumentos, carregará o XML e, em seguida, descartará o objeto analisador.Isso significa que esses dois trechos de código são equivalentes.
Quando você deseja alterar as opções padrão do analisador e reutilizar o objeto do analisador. Ou quando você deseja usar um método que está disponível apenas como método de objeto.
Por exemplo, talvez você queira passar um analisador XML configurado para outra função ou usá-lo para configurar o comportamento de outro objeto.