www.state-it.info

Gran base de respuestas a las preguntas de los desarrolladores
Header decor

Cómo realizar arbitrario script PHP en tiempo de transformación XSL?

LastDragon 2011-04-17 09:09:03

Dado


  1. Un documento XML que contiene enlaces a documentos en cualquier formato:
    <?xml version="1.0" encoding="UTF-8"?>
    <project>
        <documentation path="/path/to/file.textile" type="textile"/>
        <documentation path="/path/to/file.html" type="html"/>
    </project>
    	
  2. Un script PHP que se utiliza para la conversión de documentos en HTML
  3. XSLT estilo para transformar un documento XML en un documento HTML
  4. Ant script que se utiliza para iniciar la transformación XSL

Pregunta


Como en la transformación de documentos XML de reemplazar todo <documentation/> en un HTML? (es decir, en el conjunto de resultados es el documento debe ser el resultado de la ejecución de un script PHP, el cual como parámetros fueron entregados a la ruta de acceso del archivo y el formato)

Las soluciones


  1. Agregar el protocolo de php y en XSLT utilizar, por ejemplo, document('php:....')
  2. Doble transformación: (1) creamos un html/php documento, en el que las etiquetas <documentation/> reemplazados por una llamada de script; (2) hacemos el documento creado

(1) más preferido, pero no está claro cómo implementar.

Restricciones


  1. Мультиплатформенность
  2. Sólo el uso de los "locales" de los datos (es decir, usar http:// no se puede)

LastDragon 2011-04-17 13:26:53

La transformación se realiza ant-ohm a través de xslt, PHP no puede afectar el resultado de la conversión de todos para lo que se necesita es una forma de convertir. En su lugar, también puede cualquier otro convertidor (ahora veo la opción de crear un protocolo de "convert-to-html://<input format>/path/to/file" porque es más flexible, y biblioteca de java para la conversión de textile html tiene).


Total answers: 4

LastDragon 2011-04-24 09:22:45

Tal vez alguien va a ser interesante — el problema se resolvió de la escritura de ampliación para el procesador de xslt y su adición en el estilo (escrito en java, para la conversión de texto se utiliza org.eclipse.mylyn.wikitext)

El ejemplo de la clase:

package ru.lastdragon.ipb.toolkit.xslt;

public final class Converter {
    public static String toHtml(String path) {
        // .....
    }
}

Ejemplo del estilo de:
<xsl:stylesheet version="1.0" 
    xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
    xmlns:converter="ru.lastdragon.ipb.toolkit.xslt.Converter"
    extension-element-prefixes="converter"
    exclude-result-prefixes="converter">
    <xsl:output method="html" version="1.0" encoding="UTF-8" indent="yes" />
    
    <xsl:template match="/">
        <xsl:value-of select="converter:toHtml('path/to/file.textile')"/>
    </xsl:template>
</xsl:stylesheet>

Si alguien necesita, el código se puede encontrar (si tengo tiempo de hoy закомичу) en el repositorio del proyecto IPB3 kit de herramientas (toolkit) (licencia GPLv3).

usetester 2011-04-17 10:28:30

Sobre la opción de la decisión 1 ver www.php.net/manual/en/book.stream.php

LastDragon 2011-04-17 10:46:15

No es adecuado, ya que el siglo 1 supone la creación de un nuevo protocolo accesible para xslt procesador utilizado ant-ohm (la transformación se realiza ant-om a través de la tarea xslt). PHP se utiliza sólo para la conversión de documentos.


yadeveloper 2011-04-17 12:30:24

Haciendo "apply-template" en la "documentación".

En la propia plantilla de la misma — utiliza la siguiente funcionalidad: ua.php.net/manual/en/xsltprocessor.registerphpfunctions.php

yadeveloper 2011-04-17 12:32:34

apply-templateS


LastDragon 2011-04-17 13:13:46

No es adecuado — la causa, véase el comentario a la respuesta de usetester.


cyberklin 2011-04-17 23:08:33

la idea es:
1. registrar su función en xslt, que será el sitio web de documentación de devolver el contenido de la
2. cambiar el estilo XSLT en el punto 3, para él antes de su uso están desterrados los nodos de la documentación a través de nuestra función.

si transformaciones xslt se inicie no ant, y, por ejemplo, el script php es un truco fácil que se puede hacer a través de registerPHPFunctions ( ru2.php.net/manual/en/xsltprocessor.registerphpfunctions.php )

se puede modificar el esquema en el que ant inicia simplemente php cli-script, que es la que convierte a la transformación? entonces todo se resuelve a través de registerPHPFunctions

Preguntas relacionadas:

Footer decor

© www.state-it.info | Base of answers to questions for developers and programmers.