2011-08-27 69 views
6

作爲部分內部處理的一部分,我將節點添加到我的XML文檔中,但無法獲得XML::LibXML自動縮進添加的節點。如何使用XML :: LibXML自動縮進XML節點?

我得到這樣的輸出如下:

這裏就是我目前正在$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> 

的可選$format參數記錄在XML::LibXML::Document中的方法似乎沒有幫助。

回答

6

我打得有點與設置,這似乎工作:

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

結果是這樣的:

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

非常好!訣竅是將'no_blanks'選項添加到嵌套節點和添加節點。良好的工作@ bvr! – Zaid

+0

非常感謝!爲了參考,這個工作形式文件以及使用位置=> $ filename,{no_blanks => 1} – MasterZ

1

如果您不介意使用其他工具,我推薦XML::Tidy。它做一項工作,而且做得很好。

+0

我必須堅持'XML :: LibXML'不幸 – Zaid

+1

但是,你可以從你的主Perl代碼中調用tidy。 – toolic

+0

它在目標平臺上不可用,我不想走上包含[XML :: Tidy'](http://search.cpan.org/perldoc?XML:Tidy)源代碼的道路作爲我的腳本的一部分。 – Zaid