2010-10-06 100 views
1

我试图在php中使用XSLTProcessor class来根据DITA Open Toolkit的xslt文件从.dita文件生成xhtml。php的XSLTProcessor问题

XSLTProcessor使用简单的xml和xslt文件(例如在维基百科上使用samples),但是使用Open Toolkit的xsls失败。

如果我在相同文件(我没有使用开关)的同一台计算机上使用bash中的xsltproc命令,那么一切运行良好。

所以,这里是我的代码:

<?php 
$sXML = file_get_contents('concepts/tools.xml'); 
# LOAD XML FILE 
$XML = new DOMDocument(); 
$XML->loadXML($sXML); 

# START XSLT 
$xslt = new XSLTProcessor(); 
$XSL = new DOMDocument(); 

$XSL->load('xsl/dita2xhtml.xsl'); 
$xslt->importStylesheet($XSL); 
#PRINT 
print $xslt->transformToXML($XML); 

而不是一个有效的XHTML文件我得到这样的输出:

<?xml version="1.0" encoding="UTF-8"?> 
<!DOCTYPE span PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 
<span style="background-color: yellow;"><span style="font-weight: bold">[/concept 
    {""}) </span> 
<span style="background-color: yellow;"><span style="font-weight: bold">[/concept/title 
    {""}) </span>Tools<span style="font-weight: bold"> (title]</span></span> 
<span style="background-color: yellow;"><span style="font-weight: bold">[/concept/shortdesc 
    {""}) </span>Invest in a good set of tools for doing all kinds of tasks around the house.<span style="font-weight: bold"> (shortdesc]</span></span> 
<span style="background-color: yellow;"><span style="font-weight: bold">[/concept/conbody 
    {""}) </span><span style="background-color: yellow;"><span style="font-weight: bold">[/concept/conbody/p 
    {""}) </span>Useful tools include the following items:<span style="font-weight: bold"> (p]</span></span> (...) 

这只是输出的第一部分,但我没有我不想在这里复制整个文本。

xsl文件和dita概念文件都来自DITA Open Toolkit。

任何想法有什么不对?

+0

我想你应该提供一个降低输入样本引起为了测试问题,或者至少向全情投入的链接。 – 2010-10-06 18:34:12

+0

@Ajjandro:dita文件非常短,但是xsl文件引用了很多其他文件,它们非常大。在这里(http://sourceforge.net/projects/dita-ot/),您可以下载DITA Open Toolkit(您不必安装或运行它),其中包含所有文件。我的测试文件是:samples/concepts/tools.xml和xsl/dita2xhtml.xsl。我可以稍后将它们上载到某个服务器上的zip文件中,如果它更好。 – mimrock 2010-10-06 18:40:41

+0

我得到了与MSXSL相同的结果。输出假设是什么? – 2010-10-06 20:05:50

回答

0

最后,我的问题解决了。 tools.xml有一个外部的dtd参考

<!DOCTYPE concept PUBLIC "-//OASIS//DTD DITA Concept//EN" 

"../../dtd/technicalContent/dtd/concept.dtd"> 

这是默认情况下没有加载DOMDocument,并导致所有问题。如果你有同样的问题,你必须使用LIBXML_DTDATTR选项是这样的:

$f = 'DITA-OT1.5.1/samples/concepts/tools.xml'; 
$XML = new DOMDocument(); 
$XML->load($f,LIBXML_DTDATTR);