2011-08-27 11 views
6

Dodaję węzły do ​​mojego dokumentu XML jako część wewnętrznego przetwarzania, ale nie mogę uzyskać XML::LibXML automatycznego wcięcia dodanych węzłów.Jak mogę automatycznie wcięte węzły XML z XML :: LibXML?

mam wyjścia jak następuje:

Oto co mam obecnie coraz z $xml->toString(1):

        <nested_nodes> 
             <nested_node> 
             <configuration>A</configuration> 
             <model>45</model> 
             <added_node> 
     <ID> 
      <type>D</type> 
      <serial>3</serial> 
      <kVal>3</kVal> 
     </ID> 
    </added_node> 
</nested_node> 
            </nested_nodes> 

Co chciałbym mieć to całkiem-wydruk:

      <nested_nodes> 
           <nested_node> 
            <configuration>A</configuration> 
            <model>45</model> 
            <added_node> 
             <ID> 
              <type>D</type> 
              <serial>3</serial> 
              <kVal>3</kVal> 
             </ID> 
            </added_node> 
           </nested_node> 
          </nested_nodes> 

Opcjonalny parametr $format dla toString() metoda udokumentowana w XML::LibXML::Document nie wydaje się pomóc.

Odpowiedz

6

grałem trochę z ustawieniami, a to wydaje się działać:

use XML::LibXML; 

my $doc = XML::LibXML->load_xml(string => <<END_XML, { no_blanks => 1 }); 
            <nested_nodes> 
             <nested_node> 
             <configuration>A</configuration> 
             <model>45</model> 
             <added_node> 
     <ID> 
      <type>D</type> 
      <serial>3</serial> 
      <kVal>3</kVal> 
     </ID> 
    </added_node> 
</nested_node> 
            </nested_nodes> 
END_XML 

print $doc->toString(1); 

Rezultat jest taki:

<?xml version="1.0"?> 
<nested_nodes> 
    <nested_node> 
    <configuration>A</configuration> 
    <model>45</model> 
    <added_node> 
     <ID> 
     <type>D</type> 
     <serial>3</serial> 
     <kVal>3</kVal> 
     </ID> 
    </added_node> 
    </nested_node> 
</nested_nodes> 
+1

Doskonale! Sztuką było dodanie opcji 'no_blanks' zarówno do zagnieżdżonych, jak i dodanych węzłów. Dobra robota @bvr! – Zaid

+0

Dziękuję, bardzo! Dla odniesienia działa ten plik, jak również przy użyciu location => $ filename, {no_blanks => 1} – MasterZ

1

Jeśli nie masz nic przeciwko używaniu innego narzędzia, polecam XML::Tidy. Wykonuje jedną pracę i robi to dobrze.

+0

muszę trzymać się z 'XML :: LibXML' niestety – Zaid

+1

Ale, można Wywołaj porządek z głównego kodu perl. – toolic

+0

Nie jest dostępny na platformie docelowej i nie chcę iść na dół, włączając źródło ['XML :: Tidy'] (http://search.cpan.org/perldoc?XML::Tidu) w ramach moich skryptów. – Zaid

Powiązane problemy