如何在 Web 浏览器中查看 XML 文件

将 XML 文件转换为更有用的东西。
191 位读者喜欢这篇文章。

一旦你了解到 HTML 是一种 XML 形式,你可能会想,如果你尝试在浏览器中查看 XML 文件会发生什么。结果相当令人失望——Firefox 会在页面顶部显示一个横幅,上面写着:“此 XML 文件似乎没有任何与之关联的样式信息。文档树如下所示。” 文档树看起来就像文件在编辑器中的样子

Scribus XML file

这是 Scribus 在线手册的 menu.xml 文件的开头,我是该手册的贡献者。虽然你看到蓝色文本,但它们不是可点击的链接。我希望能够在常规浏览器中查看它,因为有时我需要在 Scribus 中的画布和手册之间来回切换,以弄清楚如何做某事(也许是为了查看是否需要编辑手册以纠正一些错误信息或添加一些遗漏的信息)。

帮助浏览器知道如何处理这些 XML 标签的方法是使用 XSLT——可扩展样式表语言转换。从广义上讲,你可以使用 XSLT 将 XML 转换为各种输出,甚至将 HTML 转换为 XML。在这里,我想用它将 XML 标签以合适的 HTML 形式呈现给浏览器。

XML 文件需要进行一个小的修改

Modified XML file

在文件中添加第二行告诉浏览器查找名为 scribus-manual.xsl 的文件以获取样式信息。更重要的部分是创建这个 XSL 文件。以下是 Scribus 手册的 scribus-manual.xsl 的完整列表

<?xml version="1.0" encoding="utf-8"?>

<xsl:stylesheet version="1.0"
   xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
  <xsl:template match="/">
    <html>
    <title>Scribus Online Manual</title>
<style type="text/css">
h2,h3,h4 { text-indent: 50px;}
ul { margin-left: 100px;}
</style>
<table border="0" cellspacing="0" cellpadding="0" width="100%"
bgcolor="#183867" >
	<tr>
		<td align="left"><img src="https://open-source.net.cn/images/docheader1.png" width="222"
height="87"/></td>
		<td align="right"><img src="https://open-source.net.cn/images/docheader2.png" width="318"
height="87"/></td>
	</tr>
</table>

    <body bgcolor="#ffffff">

      <xsl:for-each select="menu">
	<xsl:for-each select="area">
	  <h3><a href="https://open-source.net.cn/%7B%40file%7D" ><xsl:value-of select = "@text" /></a></h3>
	  <xsl:for-each select="submenuitem">
	    <h4><a href="https://open-source.net.cn/%7B%40file%7D" ><xsl:value-of select = "@text" /></a></h4>
		<xsl:for-each select="submenuitem">
		  <p><ul>
		    <li><a href="https://open-source.net.cn/%7B%40file%7D" ><xsl:value-of select = "@text" /></a></li>
		  </ul></p>
		</xsl:for-each>
	  </xsl:for-each>
	<xsl:for-each select="area">
	  <h3><a href="https://open-source.net.cn/%7B%40file%7D" ><xsl:value-of select = "@text" /></a></h3>
        </xsl:for-each>
	</xsl:for-each>
      </xsl:for-each>
    </body>
    </html>
  </xsl:template>
</xsl:stylesheet>

这看起来更像 HTML,你可以看到它包含许多 HTML 标签。在一些初步标签和一些关于显示 H2、H3 和 H4 标签的细节之后,你看到了一个 Table 标签。这会在页面顶部添加一个图形标题,并使用文档文件中已存在的一些图像。

之后,你将进入剖析各种 submenuitem 标签的过程,尝试创建嵌套列表结构,就像你在 Scribus 中查看手册时看到的那样。我没有尝试复制的一个功能是折叠和展开 submenuitem 区域的能力。你可以想象,需要花费一些时间来整理你需要创建的嵌套列表的数量,但是当我完成后,这就是它的外观

Scribus menu

menu.xml 的这种最小程度的编辑不会干扰 Scribus 在其自己的浏览器中显示手册的能力。我将这个修改后的 menu.xml 文件和 scribus-manual.xsl 放在 Scribus 1.5.x 版本的英文文档文件夹中,因此任何使用这些版本的人都可以简单地将其浏览器指向 menu.xml 文件,它应该会像你上面看到的那样显示出来。

几年前,我承担了一项更大的任务,那就是在 ICD10(国际疾病分类,第 10 版)发布时创建其版本。从以前的版本 (ICD9) 到 10 进行了许多更改。这些很重要,因为这些代码必须用于医疗实践中的诊断目的。你可以从美国医疗保险和医疗补助服务中心网站轻松下载 XML 文件,因为它是公共信息,但与 Scribus 手册一样,这些文件很难使用。

这是疾病表格列表的开头

Tabular listing of diseases in ICD10

我创建的功能之一是此处显示的列表中使用的颜色编码

Color-coding feature

menu.xml 一样,我在 Tabular.xml 文件中做的唯一编辑是添加 <?xml-stylesheet type="text/xsl" href="https://open-source.net.cn/tabular.xsl"?> 作为文件的第二行。我从 2014 版本开始了这个项目,我很高兴地发现,当 2016 版本发布时,原始的 tabular.xsl 样式表仍然可以完美运行,这是我最后使用的版本。Tabular.xml 文件为 8.4MB,对于纯文本文件来说非常大。加载到浏览器需要几秒钟,但一旦加载完成,导航速度很快。

虽然你可能不经常需要以这种方式处理 XML 文件,但如果你需要,我希望这篇文章表明你的文件可以很容易地变成更有用的东西。

标签
Greg Pittman
Greg 是肯塔基州路易斯维尔的一位退休神经科医生,长期以来对计算机和编程感兴趣,从 1960 年代的 Fortran IV 开始。当 Linux 和开源软件出现时,它激发了学习更多知识的承诺,并最终做出贡献。他是 Scribus 团队的成员。

3 条评论

很棒的文章,谢谢!我经常希望 XSL 更像 CSS……但它不是,所以关于 XSL 的文章总是受欢迎的。

XSL 的优点之一是,一旦你做对了,结果就会非常神奇。

我有一个由软件包生成的大型报告(大约 2,300 个项目,每个项目 10 列,略超过 38MB,大约有 446 页)。我编写了几个 XSLT 文件,以便为我提供信息的不同视图。

我的问题是,在台式机上,它在 FireFox、Edge 和 IE 中加载速度非常慢,并且在 Chrome 或 Opera 中不起作用。手机或平板电脑浏览器似乎根本不喜欢它。

有什么想法、提示、资源等吗?我正在尝试尽可能保持简单,但可以求助于 JasperReports 等工具,或者编写自己的 Java 代码来导入、格式化和导出为 pdf、html 或其他可以在台式机或手持设备上读取的文件。

感谢任何建议或帮助。

Creative Commons License本作品根据知识共享署名-相同方式共享 4.0 国际许可协议获得许可。
© . All rights reserved.