2009-07-01 97 views
4

我使用Perl和XML::Simple模塊創建XML文件。我成功創建了XML文件,但問題是我爲每個標籤都有<opt> </opt>標籤。我正在尋找任何我們可以避開<opt> </opt>標籤的選項。我無法進行後期處理來移除標籤。因爲文件大小很大。如何刪除XML :: Simple輸出中的<opt>標籤?

實施例:

<opt> 
    <person firstname="Joe" lastname="Smith"> 
    <email>[email protected]</email> 
    <email>[email protected]</email> 
    </person> 
    <person firstname="Bob" lastname="Smith"> 
    <email>[email protected]</email> 
    </person> 
</opt> 

和我尋找(無<opt>標籤):

<person firstname="Joe" lastname="Smith"> 
    <email>[email protected]</email> 
    <email>[email protected]</email> 
    </person> 
    <person firstname="Bob" lastname="Smith"> 
    <email>[email protected]</email> 
    </person> 
+0

如果選擇是你的根節點,其結果是無效的XML,它必須有一個根節點。 – Axeman 2009-07-01 15:08:12

回答

13

標籤是從用戶提供的數據結構生成的XML的根元素。 從XML::Simple文檔 -

ROOTNAME => '字符串' #出 - 得心應手

默認情況下,當XMLout()生成 XML,根元素將被命名爲 '選擇'。這個選項可以讓你指定一個替代名字 。

爲RootName選項指定undef或空 字符串 將生成沒有根元素的XML。在 大多數情況下,生成的XML片段 將不會'格式良好',因此 無法通過 XMLin()讀回。儘管如此,該選項有 被發現在某些 的情況下有用。

要將根元素設置爲空,只需將RootName作爲'undef'傳遞給XMLout,例如。

use XML::Simple; 

my $xml = XMLout($hashref, RootName => undef); 
0

上述答案對我無效。你可以做的是:

my $xml = XML::Simple->new(KeepRoot=>0); 
print $xml->XMLout($YourVariable); 

也就是說,一個有效的XML文檔應該有一個根。如果你想要做的是命名您的根節點,你可以這樣做:

print $xml->XMLout({'RootNodeName' => {'ChildNode'=>[@ArrayOfThings]}}); 
1

我碰到這個答案出來了相同的信息(讀取,分析,修改和輸出XML搜索時,修復<opt>根標籤),但在Ruby中。

僅供參考,根節點也可以卸下或在圖書館的Ruby version命名爲:

require 'xmlsimple' # gem install xml-simple 
data = XmlSimple.xml_in(filename) # read data from filename 
# Parse data as needed, then output: 
XmlSimple.xml_out(data, { 'RootName' => nil })  # Remove root element 
XmlSimple.xml_out(data, { 'RootName' => 'html' }) # Change root <opt> to <html>