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

这是 Scribus 在线手册的 menu.xml 文件的开头,我是该手册的贡献者。虽然你看到蓝色文本,但它们不是可点击的链接。我希望能够在常规浏览器中查看它,因为有时我需要在 Scribus 中的画布和手册之间来回切换,以弄清楚如何做某事(也许是为了查看是否需要编辑手册以纠正一些错误信息或添加一些遗漏的信息)。
帮助浏览器知道如何处理这些 XML 标签的方法是使用 XSLT——可扩展样式表语言转换。从广义上讲,你可以使用 XSLT 将 XML 转换为各种输出,甚至将 HTML 转换为 XML。在这里,我想用它将 XML 标签以合适的 HTML 形式呈现给浏览器。
XML 文件需要进行一个小的修改

在文件中添加第二行告诉浏览器查找名为 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 区域的能力。你可以想象,需要花费一些时间来整理你需要创建的嵌套列表的数量,但是当我完成后,这就是它的外观

对 menu.xml 的这种最小程度的编辑不会干扰 Scribus 在其自己的浏览器中显示手册的能力。我将这个修改后的 menu.xml 文件和 scribus-manual.xsl 放在 Scribus 1.5.x 版本的英文文档文件夹中,因此任何使用这些版本的人都可以简单地将其浏览器指向 menu.xml 文件,它应该会像你上面看到的那样显示出来。
几年前,我承担了一项更大的任务,那就是在 ICD10(国际疾病分类,第 10 版)发布时创建其版本。从以前的版本 (ICD9) 到 10 进行了许多更改。这些很重要,因为这些代码必须用于医疗实践中的诊断目的。你可以从美国医疗保险和医疗补助服务中心网站轻松下载 XML 文件,因为它是公共信息,但与 Scribus 手册一样,这些文件很难使用。
这是疾病表格列表的开头

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

与 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 文件,但如果你需要,我希望这篇文章表明你的文件可以很容易地变成更有用的东西。
3 条评论