2013-01-18 49 views
1

作爲一個例子,我有一個Perl XML ::嫩枝對象$xmlDef,其包含以下內容:XML輸出::嫩枝對象內容

<ROOT> 
    <CHILD> 
    </CHILD> 
</ROOT> 

它用下面的代碼生成:

my $parser = XML::Twig->new(
      twig_handlers => { 
       ROOT => sub { $xmlDef = $_ } 
      }, 
      pretty_print => 'indented' 
    ); 
    $parser->parse($xmlStr); 

當我使用$xmlDef->print查看$xmlDef時,其內容會正確輸出到控制檯。當我做print $xmlDef->text時,沒有東西會得到輸出。我在做什麼錯誤使用->text

+1

嘗試'$打印xmlDef-> sprint' – mirod

+0

@mirod,似乎工作!如果我使用該方法將'$ xmlDef'添加到另一個XML對象:'$ diffXml-> insert_new_elt('last_child',$ xmlDef-> sprint)',我會得到如下輸出結果:'

** <** **/> **
'。我如何得到它,因此它不會將額外的** < /> **放在'$ xmlDef'內容附近? –

+1

你想做什麼?如果你試圖插入根作爲一個元素,那麼你不應該在之前(通過'sprint')序列化它。執行'$ xmlDef-> move(last_child => $ diffXml)'或'$ xmlDef-> clone-> paste(last_child => $ diffXml)'第二個選項可能更安全一些,樹在舊版本的XML :: Twig中。 – mirod

回答

3

text方法返回給定元素的所有文本內容。嘗試添加一些文字到您的XML:

<ROOT> 
    <CHILD> 
    This will be printed. 
    </CHILD> 
</ROOT> 
+0

啊我明白了。如果我想返回文本+結構呢?我想將'$ xmlDef'並將其插入另一個XML對象(例如'$ diffXml-> insert_new_elt('last_child',$ xmlDef)')。然而,當我這樣做的時候,我得到了''代替'$ xmlDef'而不是實際的內容。 –

+0

「insert_new_elt」的第二個參數是一個元素名稱,而不是一個XML字符串,所以您正在創建一個具有長(和無效!)名稱的元素。有趣的是,如果參數看起來像XML(即它以'<'開頭),那麼它將在未來版本的模塊中起作用,然後它將被解析。我本週早些時候添加了這個模塊的開發版本。 – mirod