メモの日々


2019年08月30日(金) [長年日記]

[web] XML内にXHTML要素を書くとブラウザがHTMLとしてレンダリングしてしまう

XMLファイルをウェブブラウザで開くとそれなりにレンダリングしてくれて、簡易XMLビューワとして使える。

しかし、XML内にXHTMLの要素を含めるとHTMLとしてレンダリングされてしまうようだ。こうなるとXMLビューワとしては使えないので不便。

元々はブラウザで表示が変になるXMLがあるけど何故だろうと調べていて、次のコメントを見てHTMLとしてレンダリングされているのかと気づいた。

this declaration puts the parsers to the XHTML mode and handles the document as an XHTML document. The rendering results makes sense if browsers parsed the document as an XHTML.

以下にFirefox 68での例を示すが、Chrome 76やEdge 44、IE 11でも同様の振る舞いになる。表示モードを切り替えるスイッチがあるといいのだが、あったりするのだろうか?

通常のXMLのレンダリング

次のファイルを用意する。

<?xml version="1.0" encoding="UTF-8"?>
<kenichi xmlns:h="http://www.w3.org/1999/xhtml">
    <hello>こんにちは</hello>
</kenichi>

kenichi要素でXHTMLの名前空間を参照しているが、これは後に示すの例と比較するために書いているだけで本質的なものではない。

上のXMLをFirefoxで開くと、次のようにXML要素がツリー上に表示される。

XMLとしてレンダリングされている様子

XHTML要素を含むXMLのレンダリング

先の例に「<h:s>さようなら</h:s>」という行を追加した次のファイルを用意する。

<?xml version="1.0" encoding="UTF-8"?>
<kenichi xmlns:h="http://www.w3.org/1999/xhtml">
    <hello>こんにちは</hello>
    <h:s>さようなら</h:s>
</kenichi>

上のXMLをFirefoxで開くと、次のようにHTMLとして表示されてしまう。

HTMLとしてレンダリングされている様子