質問
私は使用しようとしています XSLTProcessorクラス PHPで、に基づいて.ditaファイルからxhtmlを生成する DITAオープンツールキット's xsltファイル。
XSLTProcessorは、単純なXMLおよびXSLTファイルを使用しています(例: サンプル Wikipediaで)、しかし、オープンツールキットの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オープンツールキットからのものです。
何が悪いのか?
解決
最後に、私の問題は解決しました。 tools.xmlには外部DTD参照がありました
<!DOCTYPE concept PUBLIC "-//OASIS//DTD DITA Concept//EN"
"../../dtd/technicalContent/dtd/concept.dtd">
WichはデフォルトではDomdocumentにロードされておらず、それがすべての問題を引き起こしました。同じ問題がある場合は、 libxml_dtdattr このようなオプション:
$f = 'DITA-OT1.5.1/samples/concepts/tools.xml';
$XML = new DOMDocument();
$XML->load( $f,LIBXML_DTDATTR);
所属していません StackOverflow