我想更多地了解默认的Mozilla XSLT是如何工作的,因为我喜欢默认情况下显示XML文档的方式,并且可以扩展/最小化各种节点。
我获得了以下内容的副本:
我无法以相同的方式找到以下内容,而是通过Mozilla浏览器将它们保存在本地。 即。
chrome://global/locale/xml/prettyprint.dtd
所有四个文件都保存在同一个文件夹中。
准备了一些简单的XML并保存在同一个文件夹中:
<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" href="XMLPrettyPrint.xsl"?>
<breakfast_menu>
<food>
<name>Belgian Waffles</name>
<price>$5.95</price>
</food>
<food>
<name>Strawberry Belgian Waffles</name>
<price>$7.95</price>
</food>
</breakfast_menu>
在XMLPrettyPrint.xsl中,我编辑以下内容:
<xsl:template match="/">
<link href="chrome://global/content/xml/XMLPrettyPrint.css" type="text/css" rel="stylesheet"/>
<link title="Monospace" href="chrome://global/content/xml/XMLMonoPrint.css" type="text/css" rel="alternate stylesheet"/>
...
</xsl:template>
到
<xsl:template match="/">
<link href="XMLPrettyPrint.css" type="text/css" rel="stylesheet"/>
<link title="Monospace" href="XMLMonoPrint.css" type="text/css" rel="alternate stylesheet"/>
...
</xsl:template>
如果我打开XML文件Mozilla,它只能部分工作。该文档看起来格式正确,但颜色不存在,节点也没有崩溃。
我还需要改变什么?
编辑2016.03.29 @ 16:00
<xsl:template match="/">
<html>
<head>
<link href="XMLPrettyPrint.css" type="text/css" rel="stylesheet"/>
<link title="Monospace" href="XMLMonoPrint.css" type="text/css" rel="alternate stylesheet"/>
<div id="header" dir="&locale.dir;">
<p>
&xml.nostylesheet;
</p>
</div>
</head>
<body>
<xsl:apply-templates/>
</body>
</html>
</xsl:template>
更新到@import网址
/*@import url("resource://gre-resources/viewsource.css");*/
@import url("viewsource.css");
答案 0 :(得分:2)
语法高亮(着色)CSS规则在viewsource.css文件中定义,但它们仅适用于在highlight
类中具有祖先的元素。
XMLPrettyPrint.xsl文件不会生成highlight
类的任何内容,因此您可以通过将<xsl:apply-templates/>
中的xsl:template
包裹在{{1}中来解决此问题。有这个类:
div
现在结果呈现颜色,但它们太靠近左侧,并且缺少根元素上的<div class="highlight">
<xsl:apply-templates/>
</div>
。这是因为Mozilla的漂亮打印渲染器似乎用一些填充包围结果,而−
位于带有−
类的div
中,其左边距为{ {1}}。
您可以通过在左侧提供包装expander
16px填充来解决此问题:
-16px
您需要一些JavaScript才能使扩展/折叠功能正常工作。 XMLPrettyPrint.xml文件定义了此代码。您可以将它放在div
元素中,将其包含在XSLT中。
为了附加事件,您可以为包装器<div class="highlight" style="padding-left: 16px">
<xsl:apply-templates/>
</div>
提供一个ID并选择它来附加事件:
<script>
一旦你知道了,渲染的HTML就应该像Mozilla的默认渲染器一样。