2011-08-27 8 views
6

Estoy agregando nodos a mi documento XML como parte de algún procesamiento interno, pero no puedo obtener XML::LibXML para autodentular los nodos agregados.¿Cómo puedo autodefinir los nodos XML con XML :: LibXML?

consigo salida como la siguiente:

Aquí es lo que estoy recibiendo actualmente con $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> 

Lo que me gustaría es tener salida bastante impresa-:

      <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> 

El parámetro opcional $format paraEl métododocumentado en XML::LibXML::Document no parece ayudar.

Respuesta

6

jugué un poco con los ajustes y esto parece que funciona:

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); 

El resultado es el siguiente:

<?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

¡Excelente! El truco fue agregar la opción 'no_blanks' a los nodos anidados y agregados. Buen trabajo @bvr! – Zaid

+0

¡Muchas gracias! Para la referencia, esto también funciona en el archivo usando location => $ filename, {no_blanks => 1} – MasterZ

1

Si no le importa usar otra herramienta, recomiendo XML::Tidy. Hace un trabajo, y lo hace bien.

+0

tengo que seguir con 'XML :: LibXML' lamentablemente – Zaid

+1

Pero, se podría llamar ordenado desde su código perl principal. – toolic

+0

No está disponible en la plataforma de destino, y no quiero ir por el camino de incluir la fuente ['XML :: Tidy'] (http://search.cpan.org/perldoc?XML::Tidy) como parte de mis guiones. – Zaid

Cuestiones relacionadas