Visualizadores XML nativos no Firefox e Chrome não conseguem analisar XML + XHTML

Visualizadores XML nativos no Firefox e Chrome não conseguem analisar XML + XHTML

Geralmente fico muito feliz com o nativoVisualizador XMLno Firefox.

Ele exibe arquivos XML válidos (como o mostrado abaixo) de forma clara e útil.

Exemplo 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>

No entanto, notei que assim que adiciono XHTML ao XML (usando o namespace XHTML correto - veja abaixo), oVisualizadores XMLno Firefox e no Chrome, volte a exibir o XML como texto simples:

Namespace e elemento XHTML:

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

Exemplo 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>

Por muito tempo pensei que estava introduzindo um erro no meu XML e o invalidando. Mas verifiquei vários validadores XML de terceiros e o XML é definitivamente válido. Acontece que os visualizadores nativos do navegador (aparentemente) não conseguem lidar com a inclusão de XHTML no XML.

Há algo que eu possa fazer nesta situação para ajudar o nativoVisualizadores XMLno Firefox e no Chrome entendem e analisam a marcação como XML ou não há nada a ser feito por enquanto e o software de terceiros é a única resposta?

Responder1

Os navegadores da Web tentam renderizar qualquer coisa, você joga neles, como HTML. Somente, se eles tiverem certeza de que não há HTML, eles serão renderizados como texto simples ou XML, este último em uma visualização em árvore (como no seu primeiro exemplo). As exceções notáveis ​​seriam SVG e MathML, que são renderizados de forma diferente.

Como o navegador detectou HTML no seu segundo exemplo, ele mudou para a visualização HTML.

Uma pequena explicação:

Contanto que o navegador tenha informações de estilo dos elementos, ele fará uso delas. Este é o caso do HTML (para o qual os estilos padrão são codificados no navegador). Ele vaitambémseja o caso, quando o navegador encontra CSS associado a qualquer XML, seja através da instrução de processamento

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

ou via estilo embutido (por meio do 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>

No seu segundo exemplo, ele encontrou essas informações de estilo, pois encontrou HTML, para o qual possui estilos codificados e implícitos e, portanto, renderizou-o com estilo.

Quando o navegador renderizar o documento XML, ele renderizará todos os elementos para os quais não possui um estilo padrão, conformeconteúdo embutido. Você presumiu que esse pode ser o motivo pelo qual ele exibe o conteúdo como texto simples.

Se tivesse encontrado elementos de script HTML, teria executado o Javascript neles. Portanto, a visualização em árvore é apenas uma alternativa e não o padrão.

Se você não gosta desse comportamento, você pode tentar descobrir se o seu navegador suporta uma opção de configuração, que altera esse comportamento, mas não conheço nenhum.

informação relacionada