Los visores XML nativos en Firefox y Chrome no pueden analizar XML + XHTML

Los visores XML nativos en Firefox y Chrome no pueden analizar XML + XHTML

En general estoy bastante contento con el nativo.Visor XMLen Firefox.

Muestra archivos XML válidos (como el siguiente) de forma clara y útil.

Ejemplo de XML:

<?xml version="1.0" encoding="UTF-8"?>
<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">

  <url>
    <loc>https://example.com/</loc>
    <lastmod>2020-03-17T15:57:23+00:00</lastmod>
  </url>

</urlset>

Sin embargo, he notado que tan pronto como agrego XHTML al XML (usando el espacio de nombres XHTML correcto, ver más abajo), elVisores XMLTanto en Firefox como en Chrome se vuelve a mostrar el XML como texto sin formato:

Espacio de nombres y elemento XHTML:

  • Espacio de nombres XHTML:xmlns:xhtml="http://www.w3.org/1999/xhtml"
  • Elemento XHTML:<xhtml:link />

Ejemplo de XML + XHTML:

<?xml version="1.0" encoding="UTF-8"?>
<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9"
  xmlns:xhtml="http://www.w3.org/1999/xhtml">

  <url>
    <loc>https://example.com/</loc>
    <lastmod>2020-03-17T15:57:23+00:00</lastmod>
    <xhtml:link rel="alternate" hreflang="en" href="https://example.com/" />
    <xhtml:link rel="alternate" hreflang="de" href="https://example.com/de/" />
  </url>

  <url>
    <loc>https://example.com/de/</loc>
    <lastmod>2020-03-12T19:42:12+00:00</lastmod>
    <xhtml:link rel="alternate" hreflang="en" href="https://example.com/" />
    <xhtml:link rel="alternate" hreflang="de" href="https://example.com/de/" />
  </url>

</urlset>

Durante mucho tiempo pensé que estaba introduciendo un error en mi XML y anulándolo. Pero he comprobado numerosos validadores XML de terceros y el XML es definitivamente válido. Es sólo que los espectadores nativos del navegador (aparentemente) no pueden soportar que XHTML se incluya dentro del XML.

¿Hay algo que pueda hacer en esta situación para ayudar a los nativos?Visores XMLen Firefox y Chrome, ¿entiende y analiza el marcado como XML o no hay nada que hacer por ahora y el software de terceros es la única respuesta?

Respuesta1

Los navegadores web intentan representar cualquier cosa que les muestres como HTML. Sólo que, si saben con seguridad que no hay HTML, lo representarán como texto sin formato o XML, este último en una vista de árbol (como en el primer ejemplo). Las excepciones notables serían SVG y MathML, que se representan de forma diferente.

Dado que el navegador detectó HTML en su segundo ejemplo, cambió a la vista HTML.

Una pequeña explicación:

Siempre que el navegador tenga información de estilo para los elementos, los utilizará. Este es el caso de HTML (para el cual los estilos predeterminados están codificados en el navegador). Va atambiénser el caso, cuando el navegador encuentra CSS asociado con cualquier XML, ya sea a través de la instrucción de procesamiento

<?xml-stylesheet href="style.css"?>

o mediante estilo en línea (a través del styleelemento HTML)

<html:style type="text/css">
  @namespace url("http://www.example.org/ns/example");
  @namespace html url("http://www.w3.org/1999/xhtml");
  paragraph {display: block;}
  meta {display: none;}
  html|style {display:none;}
  html|script {display:none;}
</html:style>

En su segundo ejemplo, encontró dicha información de estilo, ya que encontró HTML, para el cual tiene estilos codificados e implícitos y, por lo tanto, le dio estilo.

Cuando el navegador renderiza el documento XML, renderizará todos los elementos para los que no tiene un estilo predeterminado, comocontenido en línea. Esta puede ser la razón, supuso, por la que muestra el contenido como texto sin formato.

Si hubiera encontrado elementos de secuencia de comandos HTML, habría ejecutado el Javascript que contienen. Por lo tanto, la vista de árbol es solo una opción alternativa y no la predeterminada.

Si no le gusta este comportamiento, puede intentar averiguar si su navegador web admite un interruptor de configuración que cambie este comportamiento, pero no conozco ninguno.

información relacionada