使用XSL样式表创建XML链接

时间:2016-12-03 14:53:12

标签: html xml xslt

我有一个XML文件和3个xsl文件,它们转换相同的xml。我想用三个按钮创建一个主页。每个按钮将重定向到三个转换之一。如何使用特定转换创建指向xml文件的链接。 假设我有:example.xml和t1.xsl,t2.xsl,t3.xsl和index.html,按钮为t1,t2,t3。当我按下t1按钮时,我想获取由t1.xsl转换的XML文件。

1 个答案:

答案 0 :(得分:0)

从你的描述(&#34;主页,......&#34;)我推断所有这一切都应该在网上发生;在这种情况下,答案很可能涉及配置Web服务器的规则,因此它将成为关于Apache,IIS或nginx或Jetty或任何服务器实际为您的文档提供服务的问题。< / p>

实现目标的方法有很多种;这些是我发生的前三个或四个。具体来说,我假设您正在使用Apache(很多人都这样做),知道如何查找和编辑Apache配置文件,并且可以调整相对引用以适合您的目录布局。

  • 假设你想要的正是@Stefan Hegny认为你不想要的东西。

    您保存了三份XML文档。名为example.1.xml的那个开始

    <?xml-stylesheet href="t1.xsl" type="text/xsl"?>
    <example>
      ...
    

    名为example.2.xml的人开始

    <?xml-stylesheet href="t2.xsl" type="text/xsl"?>
    <example>
      ...
    

    类似地,example.3.xml以对t3.xsl的引用开始。

    这三个按钮指向这三个文件。

    如果example.xml仍在更改,您将需要在主文档发生更改时自动更新三个几乎相同的副本的过程;我自己使用Make和sed来完成这些任务。

  • 使用example.xml

    的单个副本实现同样目标的另一种方法

    实现相同效果的另一种方法是维护example.xml的单个副本,并引用t1.xsl(因此它看起来像上面描述的example.1.xml),并告诉您服务器

    • 每当用户请求URI example.1.xml时,请提供文档example.xml
    • 每当用户请求URI example.2.xml时,运行命令sed -e s/t1.xsl/t2.xsl/ < example.xml并将结果(stdout)发送到客户端。
    • 每当用户请求URI example.3.xml时,运行命令sed -e s/t1.xsl/t3.xsl/ < example.xml并将结果(stdout)发送到客户端。

    在Apache中,我使用Rewrite模块将这三个URI重定向到一个CGI脚本,该脚本检查调用它的URI并运行相应的命令。

    这三个按钮继续指向三个URI example.1.xmlexample.2.xmlexample.3.xml

  • 在服务器上运行样式表

    如果三个显示器必须能够在不支持XSLT的浏览器上运行,那么您需要在服务器上运行样式表。

    在这里,我再次使用Rewrite将URI重定向到CGI脚本,但是CGI脚本不是运行sed,而是运行xsltproc,或者我的服务器上可用的任何XSLT处理器。

  • 在浏览器中运行样式表

    处理此要求的另一种方法是使index.xhtml成为XForms文档,适用于支持transform()扩展函数的处理器(例如XSLTForms)。文档example.xml由xf:instance元素引用,三个按钮调用该实例上的三个样式表。他们可能会更新辅助实例,或者他们可能只是导致xf:switch中的不同情况显示。 (如果这对你很有意义,但你需要更多细节,请问一个标记为XForms的问题;如果它对你没有意义,那么你可能不知道XForms,这不是最简单的路径你描述的目标。)

    有些人会使用Javascript而不是XForms来完成这项任务,但是浏览器在调用内部XSLT处理器方面的变化很大,所以除非你喜欢在Javascript中解决浏览器的不一致问题,否则你可能不希望这样做方式,或者。