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>

然而,我注意到,一旦我将 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,该 HTML 具有硬编码和隐含的样式,因此对其进行了样式呈现。

当浏览器呈现 XML 文档时,它将呈现所有没有默认样式的元素,如下所示内联内容。您可能认为,这可能是它将内容显示为纯文本的原因。

如果它找到了 HTML 脚本元素,它就会执行其中的 Javascript。因此,树形视图只是一种后备,而不是默认的。

如果您不喜欢这种行为,您可以尝试查找您的网络浏览器是否支持配置开关来改变这种行为,但我不知道有任何。

相关内容