我有一个XML文件和3个xsl文件,它们转换相同的xml。我想用三个按钮创建一个主页。每个按钮将重定向到三个转换之一。如何使用特定转换创建指向xml文件的链接。 假设我有:example.xml和t1.xsl,t2.xsl,t3.xsl和index.html,按钮为t1,t2,t3。当我按下t1按钮时,我想获取由t1.xsl转换的XML文件。
答案 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
),并告诉您服务器
example.1.xml
时,请提供文档example.xml
。 example.2.xml
时,运行命令sed -e s/t1.xsl/t2.xsl/ < example.xml
并将结果(stdout)发送到客户端。 example.3.xml
时,运行命令sed -e s/t1.xsl/t3.xsl/ < example.xml
并将结果(stdout)发送到客户端。 在Apache中,我使用Rewrite模块将这三个URI重定向到一个CGI脚本,该脚本检查调用它的URI并运行相应的命令。
这三个按钮继续指向三个URI example.1.xml
,example.2.xml
和example.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中解决浏览器的不一致问题,否则你可能不希望这样做方式,或者。