2012-08-17 57 views
0

我試圖在現有XML文件的某個xpath下添加一塊內容。我是使用Perl進行XML解析的新手。但我本來應該使用這個XML::Twig使用XML :: Twig將XML記錄添加到現有XML文件中

輸入:

<model name="MDL_#USER#" oid="#LOOP#"> 
<appli name="ERETAIL" oid="2"> 
    <schema desc="Parameters schema" enab="YES" name="Parameters" oid="1" prio="1"> 
     <bean enab="YES" labl="Parameters" name="ERETAILPARA" oid="3" vers="1.0" xpos="0" ypos="0"> 
      <para> 
       <root> 
        <row desc="password encryption mode" name="OISENCRYPT" value="BASE64"/> 
       </root> 
      </para>   
     </bean> 
    </schema> 
</appli> 

輸出:

<model name="MDL_#USER#" oid="#LOOP#"> 
<appli name="ERETAIL" oid="2"> 
    <schema desc="Parameters schema" enab="YES" name="Parameters" oid="1" prio="1"> 
     <bean enab="YES" labl="Parameters" name="ERETAILPARA" oid="3" vers="1.0" xpos="0" ypos="0"> 
      <para> 
       <root> 
        <row desc="password encryption mode" name="OISENCRYPT" value="BASE64"/> 
        <row name="INTERNAL" desc="" value=""> 
         <row name="PATH" desc="Path" value="#PATH#" /> 
         <row name="EXT" desc="Adresse" value="#GAIAIP#" /> 
        </row> 
       </root> 
      </para>   
     </bean> 
    </schema> 
</appli> 

+0

你好, 感謝您的以下輸入 但如果我試圖給路徑如下我的 $ twig = XML :: Twig-> new(twig_handlers => {'/ model/appli [@ name =「ERETAIL」]/schema [@ name =「Parameters」]/bean [@ labl =「Parameters」]/para/root /'=> \&add_rows,},pretty_print =>'indented',); 我正在收到如下錯誤: 處理程序中無法識別的表達式:'/ model/appli [@ name =「ERETAIL」]/schema [@ name =「Parameters」]/bean [@ labl =「Parameters」]/para /根/」 能否請你幫我 – user1575765

+0

刪除最後一個/路徑 – mirod

回答

2

XML::Twig,創建一個處理程序來修改要更改的元素。在該處理程序,創建要那麼新的元素粘貼到元素作爲孩子:

use XML::Twig; 

my $xml = <<'HERE'; 
<model name="MDL_#USER#" oid="#LOOP#"> 
<appli name="ERETAIL" oid="2"> 
    <schema desc="Parameters schema" enab="YES" name="Parameters" oid="1" prio="1"> 
     <bean enab="YES" labl="Parameters" name="ERETAILPARA" oid="3" vers="1.0" xpos="0" ypos="0"> 
      <para> 
       <root> 
        <row desc="password encryption mode" name="OISENCRYPT" value="BASE64"/> 
       </root> 
      </para>   
     </bean> 
    </schema> 
</appli> 
</model> 
HERE 

my $twig = XML::Twig->new(
    twig_handlers => { 
     'bean/para/root' => \&add_rows, 
     }, 
    pretty_print => 'indented', 
    ); 
$twig->parse($xml); 
$twig->print; 

請記住,在處理程序中,你得到的當前元素爲$_

sub add_rows { 
    XML::Twig::Elt->new(row => { 
     name => 'PATH', 
     desc => 'Path', 
     value => '#PATH#' 
     })->paste(last_child => $_); 

    XML::Twig::Elt->new(row => { 
     name => 'EXT', 
     desc => 'Adresse', 
     value => '#GAIAIP#' 
     })->paste(last_child => $_); 
    } 
+0

您好布賴恩, 感謝您的輸入,但如果我想給路徑類似如下 我的$樹枝= XML :: Twig->新( twig_handlers => { '/ model/appli [@ name =「ERETAIL」]/schema [@ name =「Parameters」]/bean [@ labl =「Parameters」]/para/root /'=> \&add_rows, }, pretty_print =>'indented', ); 我在處理程序中收到如下錯誤,無法識別:'/ model/appli [@ name =「ERETAIL」]/schema [@ name = 「Parameters」]/bean [@ labl =「Parameters」]/para/root /'在sample2.pl第60行你能幫我嗎 – user1575765

+1

如果你有一個新的問題,請提出一個新的問題。也許有人可以幫助你。 –

相關問題