2011-06-06 61 views
4

我有一個動態創建的XML。但是,我想添加對其中XSLT文件的引用,以便能夠在Mozilla中將XML文件呈現爲HTML。僅使用XML在Perl中添加對XSLT的引用:LibXML

我想我最終的XML像這樣開始的東西:

<?xml version="1.0" encoding="utf-8"?> 
<?xml-stylesheet type="text/xsl" href="xslt_stylesheet_file.xsl"?> 
<root_node> 
</root_node> 

我不能安裝XML ::的libxslt,所以這不是一個解決方案。 另一個解決方案是將XML寫入文件,將其作爲常規文件打開並將XSLT引用添加到文件中 - 但這對我來說似乎不太合適。

有沒有優雅的解決方案呢?

編輯:

添加了一些代碼

use strict; 
use warnings; 
use XML::LibXML; 

my $final_xml = XML::LibXML::Document->new('1.0','utf-8'); 

my $root_node = $final_xml->createElement('root'); 

$final_xml->setDocumentElement($root_node); 


open (MYFILE, '>final.xml'); 
print MYFILE $final_xml->toString(); 
close (MYFILE); 

,輸出是:

<?xml version="1.0" encoding="utf-8"?> 
<root/> 
+0

你能告訴你的一些Perl代碼? – mrk 2011-06-06 15:19:09

+0

我編輯它,並添加代碼示例 – 2011-06-06 15:27:15

回答

5
use strict; 
use warnings; 
use XML::LibXML; 

my $final_xml = XML::LibXML::Document->new('1.0','utf-8'); 

my $pi = $final_xml->createProcessingInstruction("xml-stylesheet"); 
$pi->setData(type=>'text/xsl', href=>'xslt_stylesheet_file.xsl'); 
$final_xml->appendChild($pi); 

my $root_node = $final_xml->createElement('root'); 
$final_xml->setDocumentElement($root_node); 

$final_xml->toFile("final.xml") 

=>

<?xml version="1.0" encoding="utf-8"?> 
<?xml-stylesheet href="xslt_stylesheet_file.xsl" type="text/xsl"?> 
<root/> 
+0

這是整潔;我從來沒有添加處理指令。我會改變文件的寫法:'$ final_xml-> toFile(「final.xml」)'因爲它在那裏,併爲你做一些錯誤檢查和編碼/解碼。 – Ashley 2011-06-06 17:05:03

+1

@Ashley:這很有道理。我已經更新了答案。 – mzjn 2011-06-06 17:22:27

+0

thx mzjin - 這正是我正在尋找的 - thx很多 - 你在哪裏或如何發現'createProcessingInstruction'? – 2011-06-07 04:40:20

1

如果你只是想生成XML,我會使用XML::Writer。那麼你可以使用xmlDecl方法來添加你的聲明。這是一個類似於SAX的API,比XML::LibXML更類似於API,但通常在生成文檔時與處理文檔時相比不是那麼重要。另外XML::Writer不依賴於libxml2libxslt,因此安裝起來要容易得多。

相關問題