2011-08-27 30 views
6

Tôi đang thêm các nút vào tài liệu XML của mình như một phần xử lý trong nhà, nhưng không thể nhận được XML::LibXML để tự động thụt lề các nút được thêm vào.Làm cách nào để tự động thụt lề các nút XML bằng XML :: LibXML?

tôi nhận được kết quả như sau:

Đây là những gì tôi đang nhận được với $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> 
:

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

Những gì tôi muốn có sản lượng khá-in là


Thông số $format tùy chọn choPhương phápđược ghi lại trong XML::LibXML::Document dường như không giúp ích gì.

Trả lời

6

tôi đã chơi một chút với các thiết lập và điều này dường như làm việc:

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

Kết quả là thế này:

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

Tuyệt vời! Bí quyết là thêm tùy chọn 'no_blanks' vào cả hai nút lồng nhau và được thêm vào. Làm tốt lắm @bvr! – Zaid

+0

Cảm ơn bạn rất nhiều! Để tham khảo, tệp này hoạt động cũng như sử dụng location => $ filename, {no_blanks => 1} – MasterZ

1

Nếu bạn không ngại sử dụng công cụ khác, tôi khuyên bạn nên XML::Tidy. Nó làm một công việc, và nó làm tốt.

+0

tôi phải dính với 'XML :: LibXML' may – Zaid

+1

Tuy nhiên, bạn có thể gọi gọn gàng từ mã perl chính của bạn. – toolic

+0

Nó không có sẵn trên nền tảng đích và tôi không muốn đi xuống con đường bao gồm nguồn ['XML :: Tidy'] (http://search.cpan.org/perldoc?XML::Tidy) như một phần của tập lệnh của tôi. – Zaid

Các vấn đề liên quan