2009-12-15 7 views
8

Por razones históricas que tienen una mezcla dexml, html o xhtml en <xsl:output>: ¿Cuál es la mejor opción?

<xsl:output method="xml"> 

y

<xsl:output method="html"> 

y

<xsl:output method="xhtml"> 

incluir dentro de una jerarquía de archivos XSL. Ahora queremos refactorizar para que todos los archivos XSL utilicen el mismo método de salida.

Al final queremos producir salida XHTML, así que supongo que esta última sería la mejor opción.

Pero, ¿cuáles son las diferencias entre esos tres métodos de salida y cuál usarías para qué tipo de solución?

Editar: estoy usando XSLT 2.0

Respuesta

4

Encontré la respuesta leyendo la especificación XSLT 2.0 (XSLT 2.0 and XQuery 1.0 Serialization).

Dada una instancia vacía de un elemento XHTML cuyo modelo de contenido no está vacía (por ejemplo, un título vacío o párrafo) el serializador DEBEN NO utilice la forma minimizada. Es decir, DEBE salida <p></p> y no <p />.

Dado un elemento XHTML cuyo contenido se encuentra vacío, el serializador DEBE utilizar la sintaxis etiqueta minimizado, para ejemplo <br />, como el sintaxis alternativa <br></br> permitido por XML da resultados inciertos en muchos agentes de usuario existentes.El serializador DEBE incluir un espacio antes del trailing />, p. Ej. <br />, <hr /> y <img src="karen.jpg" alt="Karen" />.

El serializador NO DEBE utilizar la referencia &apos; entidad que, aunque legal en XML y, por tanto, en XHTML, no está definido en HTML y no es reconocido por todos los agentes de usuario HTML.

El serializador DEBE espacio de nombres de salida declaraciones en una manera que sea consistente con los requisitos de el XHTML DTD si esto es posible. Los DTD XHTML 1.0 requieren la declaración xmlns = "http://www.w3.org/1999/xhtml" para aparecer en el elemento html y solo en el elemento html. Los serializador MUST de salida espacio de nombres declaraciones que son consistentes con los nodos espacio de nombres presentes en el árbol resultado, pero debe evitar la salida de espacio de nombres redundantes declaraciones sobre los elementos donde el DTD haría inválida.

Eso significa que la respuesta es usar <xsl:output method="xhtml">.

+0

Si está usando XSLT 2.0. –

3

Por lo que yo sé, no hay method:xhtml a la directiva xsl:output en XSLT 1.0.

wc3schools de acuerdo con esto.

Como XHTML es un dialecto XML, eso es lo que usaría.

Si, sin embargo, está utilizando xslt 2.0, también podría usar xhtml, ya que eso es lo que está produciendo.

+0

En XSL 2.0 hay. –

+0

Así es. ¡Fijo! – Oded

8

HTML se serializará como HTML, por lo que la salida puede no ser XML bien formado. Si solo está enviando a navegadores y no le importa analizar XML, puede funcionar para usted.

XML se serializará como XML, por lo que la salida estará bien formada, pero es posible que tenga algunos problemas con los navegadores que utilicen la salida. Pequeñas cosas, como los elementos de cierre automático <script /> y <div />. Para evitar ese problema, debe jugar juegos, como agregar comentarios dentro del elemento (por ejemplo, <script src="someJSFile.js"><!--don't close my script tag --></script>)

Si tiene un motor XSLT 2.0 y quiere una salida HTML bien formada sin el dolor de cabeza de preocuparse por cómo algunos elementos se serializan, luego usan XHTML.

Cuestiones relacionadas