2016-01-14 25 views
0

我試圖直接將樣式表添加到我的perl生成的XML中。使用Perl將樣式表添加到XML XML:舊系統上的LibXML

使用來自this topic的信息,我能夠使它運行在運行perl v5.10.1的RHEL 6系統上。

然而,當我一個較舊的系統上運行它,RHEL 5用Perl v5.8.8,我的XML文件只有這個:

<?xml-stylesheet?> 

代碼用於生成XML

# Start XML Handling 
use XML::LibXML; 
my $XML = XML::LibXML::Document->new('1.0', 'utf-8'); 

# Add the lines for the stylesheet 
my $xsl = $XML->createProcessingInstruction("xml-stylesheet"); 
$xsl->setData(type => 'text/xsl', href => $CONFIG{'XML'}{'Stylesheet'}); 
$XML->appendChild($xsl); 

任何想法?我想做一些比我的perl腳本更容易修改XMl的東西,因爲它可以保存,但如果我無法實現這個功能,那可能就是我要去的地方。

P.S.不,我無法在任何系統上更新軟件。 :(

+0

你運行正是在這兩個系統在同一文件中的字符串?什麼是XML版本::你安裝的libxml r RHEL5系統? – user52889

+0

是的,完全一樣的文件。只需將它從我的開發工作站(RHEL 6)複製到磁盤,並在今天早上將它放在RHEL 5盒中。我不知道安裝了什麼版本的LibXML ...我如何查看模塊的版本? – MasterZ

+0

'perl -MXML :: LibXML -le'print $ XML :: LibXML :: VERSION'' – choroba

回答

0

這絕不是理想的解決方案,但它工作,直到有人可以給我一個更好的解決方案。

1部分,檢查樣式​​表的字符串是空白。

if ($xsl->toString eq "<?xml-stylesheet?>") { $CONFIG{'xslFixRequired'} = 1; } 

部分2,在腳本的末尾,正確保存XML之前,我搜索替換

my $FinalXML = $XML->toString($XMLFormat); 

if ($CONFIG{'xslFixRequired'}) { 
    $FinalXML =~ s/xml-stylesheet/xml-stylesheet type="text\/xsl" href="$CONFIG{'XML'}{'Stylesheet'}"/; 
}