Firefox 和 Chrome 中的本機 XML 檢視器無法解析 XML + XHTML

Firefox 和 Chrome 中的本機 XML 檢視器無法解析 XML + XHTML

我總體上對本地人非常滿意XML檢視器在火狐瀏覽器中。

它清晰且有用地顯示有效的 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 絕對有效。只是瀏覽器本機檢視器(顯然)無法處理包含在 XML 中的 XHTML。

在這種情況下我能做些什麼來幫助當地人嗎XML 檢視器在 Firefox 和 Chrome 中理解標記並將其解析為 XML,還是現在沒有什麼可做的,第三方軟體是唯一的答案?

答案1

Web 瀏覽器嘗試將您丟給它們的任何內容呈現為 HTML。只是,如果他們確定沒有 HTML,他們將呈現為純文字或 XML,後者在樹視圖中(如第一個範例所示)。值得注意的例外是 SVG 和 MathML,它們的渲染方式不同。

由於瀏覽器在第二個範例中偵測到 HTML,因此它切換到 HTML 視圖。

稍微解釋一下:

只要瀏覽器有元素的樣式訊息,它就會使用它們。 HTML 就是這種情況(預設樣式被硬編碼到瀏覽器中)。它會就是這種情況,當瀏覽器透過處理指令發現與任何 XML 關聯的 CSS 時

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

或透過內聯樣式(透過 HTMLstyle元素)

<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。因此,樹視圖只是後備方案,而不是預設視圖。

如果您不喜歡這種行為,您可以嘗試尋找您的網頁瀏覽器是否支援配置開關,從而改變這種行為,但我不知道有任何改變。

相關內容