Domanda

Sto cercando di utilizzare la XSLTProcessor classe in php per generare XHTML da un file .dita basata su file XSLT DITA Aprire Toolkit 's.

Il XSLTProcessor sta lavorando con semplici file XML e XSLT (ad esempio con le campioni su wikipedia), ma non riesce con XSL di Open Toolkit.

La parte intresting è che tutto funziona bene, se uso il comando xsltproc da bash sullo stesso computer sugli stessi file (io ho usato nessuna opzione).

Quindi, ecco il mio codice:

<?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 );

E invece di un file Valid XHTML ottengo un output simile a questo:

<?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> (...)

E 'solo la prima parte della produzione, ma non volevo copiare l'intero testo qui.

Sia il file XSL e Dita di file concetto è dal DITA Aprire Toolkit.

Tutte le idee che cosa c'è che non va?

È stato utile?

Soluzione

Infine, il mio problema è risolto. Il tools.xml aveva un riferimento DTD esterno

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

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

wich non è stato caricato dal DOMDocument di default, e che ha causato tutti i problemi. Se avete lo stesso problema, è necessario utilizzare l'opzione LIBXML_DTDATTR come in questo modo:

$f = 'DITA-OT1.5.1/samples/concepts/tools.xml';
$XML = new DOMDocument();
$XML->load( $f,LIBXML_DTDATTR);
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top