我目前正在研究在浏览器中呈现转换后的xml文件的方法。我对此的体验很少,因此会出现一些问题。
我有一个转换test.xslt,它将输入xml转换为html,以及一个包含
的输入文件test.xml<?xml version="1.0" standalone="yes"?>
<?xml-stylesheet type="text/xsl" href="test.xslt" ?>
<root>...</root>
,在IE9中打开时,在根元素中整齐地显示上面包含的转换后的xml。
问题1
是否有可用的处理指令或类似内容将源xml包含在要打开的xml中,如下所示:
<?xml version="1.0" standalone="yes"?>
<?xml-stylesheet type="text/xsl" href="test.xslt" ?>
<... instruction to include source file data.xml>
问题2
打开的文件有扩展名xml。有没有办法改变文件内容,使其成为有效的html,允许使用扩展名html保存文件,这样当打开时,将选择默认浏览器(简单地将扩展名更改为html显然没有所需的效果,所以一些结构变化是必要的)?
问题3
我的目标是查询数据库以获取xslt代码要解析的数据。这样做的最佳方法是什么(如果包含javascript则没问题)?
问题4
标准数据库实用程序可以以属性为中心的方式导出查询结果(列名称和值表示为属性名称和值)。这可能涉及从db预解析xml,以便将其转换为父子方式(列为子节点而不是属性)。执行此预解析的最佳方法是什么(注意:我已经有了xslt用于此;我想知道数据流以及何时/如何按顺序运行两个xslt)然后应用test.xslt(最好不保存中间数据)服务器上的xml结果文件?
问题5
当我在IE9中打开xml以上时,这可以正常工作。但是在Firefox错误中打开它(RTF问题,显然我需要使用Firefox的节点集功能,但我仍然需要发现哪个命名空间),并且Opera / Chrome / Safari不显示任何内容。各种浏览器的先决条件究竟是什么?我可以在哪里找到更多相关信息?
答案 0 :(得分:1)
对问题5的回答:Firefox / Mozilla,Opera,Safari,Chrome都支持命名空间http://exslt.org/common
中的EXSLT node-set extension function,对于IE和MSXML,您可以在XSLT样式表中使用脚本(导入)来允许它也支持该命名空间,请参阅http://dpcarlisle.blogspot.de/2007/05/exslt-node-set-function.html。这样在你需要使用node-set
函数的主样式表中,你不需要编写不同的代码来满足不同的命名空间。
答案 1 :(得分:1)
Q1 如果您首先提供一个html文件,然后通过javascript访问xml和xslt,它自然可以访问xslt的输入和输出。如果您使用xml-stylesheet pi来提供xml并启动转换,那么最好的事情(取决于您想要做什么)是将原始源填充到输出中,然后生成的页面中的javascript可以访问如果需要,例如
<xsl:template matcj="whatever">
<html>
<head>
<script id="source" type="x-xml-spurce">
<xsl:copy-of select="/"/>
</script>
.... whatever you were going to do
然后,如果您需要访问源以响应页面上的用户操作,脚本可以使用id source检索脚本并执行所需操作。 (如果源包括字符串的可能性,你必须更加防守地编码它。)
Q2 如果您想使用xml-stylesheet API,则必须将其作为xml提供。但是你只需要提供html,然后使用浏览器javascip xslt api从html页面的脚本中访问xml和xslt。如上所述,它比xml-stylesheet机制更灵活。
Q3 传递
Q4 如果您从javascript访问xslt,那么很容易将一个输出链接到另一个的输入而无需写回服务器,因为您只需访问结果DOM节点(或字符串,取决于)