我正在尝试使用 XSLTProcessor类 在PHP中以基于.dita文件生成XHTML DITA开放工具包的XSLT文件。

XSLTProcessor正在使用简单的XML和XSLT文件(例如 样品 在Wikipedia上),但是开放工具包的XSL会失败。

令人兴奋的部分是,如果我在同一文件上使用同一计算机上的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。

有什么想法怎么了?

有帮助吗?

解决方案

最后,我的问题得到了解决。 Tools.xml具有外部DTD参考

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

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

默认情况下,domdocument并未加载Wich,这引起了所有问题。如果您有同样的问题,则必须使用 libxml_dtdattr 这样的选项:

$f = 'DITA-OT1.5.1/samples/concepts/tools.xml';
$XML = new DOMDocument();
$XML->load( $f,LIBXML_DTDATTR);
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top