2016-01-14 19 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'}"/; 
}