Собственные просмотрщики XML в Firefox и Chrome не могут анализировать XML + XHTML

Собственные просмотрщики XML в Firefox и Chrome не могут анализировать XML + XHTML

Я в целом довольно доволен родным языкомXML-просмотрщикв Firefox.

Он наглядно и полезно отображает действительные XML-файлы (например, приведенный ниже).

Пример 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>

Однако я заметил, что как только я добавляю XHTML в XML (используя правильное пространство имен XHTML — см. ниже),XML-просмотрщикии в Firefox, и в Chrome возвращаются к отображению XML в виде обычного текста:

Пространство имен и элемент XHTML:

  • Пространство имен XHTML:xmlns:xhtml="http://www.w3.org/1999/xhtml"
  • Элемент XHTML:<xhtml:link />

Пример 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>

Долгое время я думал, что вношу ошибку в свой XML и делаю его недействительным. Но я проверил множество сторонних валидаторов XML, и XML определенно действителен. Просто браузерные средства просмотра (судя по всему) не могут справиться с включением XHTML в XML.

Могу ли я что-нибудь сделать в этой ситуации, чтобы помочь местному жителю?XML-просмотрщикив Firefox и Chrome понимают и анализируют разметку как XML или пока ничего не поделаешь и единственным решением является стороннее программное обеспечение?

решение1

Веб-браузеры пытаются отобразить все, что вы им бросаете, как HTML. Только если они точно знают, что HTML нет, они отобразят либо как простой текст, либо как XML, последний в виде дерева (как в вашем первом примере). Заметными исключениями будут SVG и MathML, которые отрисовываются по-разному.

Поскольку во втором примере браузер распознал HTML, он переключился в режим просмотра HTML.

Небольшое пояснение:

Пока браузер имеет информацию о стилях для элементов, он будет их использовать. Это касается HTML (для которого стили по умолчанию жестко закодированы в браузере). Он будеттакжебыть в случае, когда браузер находит CSS, связанный с любым XML, либо через инструкцию по обработке

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

или через встроенный стиль (через элемент HTML style)

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

Во втором примере он нашел такую ​​информацию о стилях, поскольку нашел HTML, для которого у него есть жестко запрограммированные и подразумеваемые стили, и, таким образом, отобразил его стилизованным.

Когда браузер отображает XML-документ, он отображает все элементы, для которых у него нет стиля по умолчанию, например:встроенный контент. Это может быть причиной того, что, как вы предположили, он отображает содержимое в виде обычного текста.

Если бы он нашел элементы HTML-скрипта, он бы выполнил Javascript в них. Таким образом, древовидный вид — это просто запасной вариант, а не вариант по умолчанию.

Если вам не нравится такое поведение, вы можете попробовать выяснить, поддерживает ли ваш веб-браузер переключатель конфигурации, который изменяет это поведение, но мне такие не известны.

Связанный контент