XSLT试图在本地引用默认的Mozilla样式

时间:2016-03-29 10:19:12

标签: css xml xslt mozilla

我想更多地了解默认的Mozilla XSLT是如何工作的,因为我喜欢默认情况下显示XML文档的方式,并且可以扩展/最小化各种节点。

我获得了以下内容的副本:

我无法以相同的方式找到以下内容,而是通过Mozilla浏览器将它们保存在本地。 即。

chrome://global/locale/xml/prettyprint.dtd
  • prettyprint.dtd
  • global.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");

1 个答案:

答案 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的默认渲染器一样。