Firefox と Chrome のネイティブ XML ビューアは XML + XHTML を解析できません

Firefox と Chrome のネイティブ XML ビューアは 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>

しかし、XMLにXHTMLを追加すると(正しい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 で、これらは異なる方法でレンダリングされます。

2 番目の例では、ブラウザが HTML を感知したため、HTML ビューに切り替わりました。

少し説明します:

ブラウザが要素のスタイル情報を持っている限り、ブラウザはそれを利用します。これはHTMLの場合です(デフォルトのスタイルはブラウザにハードコードされています)。またブラウザが処理命令を介してXMLに関連付けられたCSSを見つけた場合、

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

2 番目の例では、スタイルがハードコードされ暗黙的に指定されている HTML が見つかったため、そのようなスタイル情報が見つかり、スタイルが適用されてレンダリングされました。

ブラウザがXML文書をレンダリングする際、デフォルトのスタイルを持たないすべての要素を次のようにレンダリングします。インラインコンテンツこれが、コンテンツがプレーンテキストとして表示される理由であると考えられます。

HTML スクリプト要素が見つかった場合は、その中の Javascript が実行されます。したがって、ツリー ビューは単なるフォールバックであり、デフォルトではありません。

この動作が気に入らない場合は、Web ブラウザーがこの動作を変更する構成スイッチをサポートしているかどうかを確認してください。ただし、そのようなスイッチは知りません。

関連情報