相关疑难解决方法(0)

使用多个XSL文件转换XML

我有一些XML,我想使用许多XSL文件转换为HTML.这些XSL文件都通过xsl:import和xsl:include语句相关,并且都是完成转换所需的.

我知道XSL可以工作,因为<?xml-stylesheet type="text/xsl" href="transform.xsl"?>在浏览器打开的预先创建的XML文件中使用该指令会显示我想要的输出.问题是我希望能够在动态生成的XML上复制此功能.

我可以通过两种方式看到这可能已经完成,但两者似乎都有局限性,我无法解决这些问题.

第一种解决方案是使用Javascript来转换XML.据我所知,这将需要XSLTProcessor对象加载多个XSL文件,但Chrome(可能还有其他浏览器)不支持xsl:import非常好 - http://code.google.com/p/chromium/问题/细节?ID = 8441

我还研究了将XML写入iFrame或新窗口,但是<?xml-stylesheet type="text/xsl" href="transform.xsl"?>在结果窗口中注释掉了指令.实际上写入新窗口的任何内容都是HTML - 我还没有找到将XML写入新窗口的方法.

那么如何让浏览器窗口显示用一组XSL文件转换的XML文件的结果?

UPDATE

所以这是我对这个问题的研究结果.

可能的解决方法:使用emscripten将xsltproc之类的工具编译为JavaScript.我实际上已经这样做了 - 请参阅https://github.com/mcasperson/xsltproc.js

问题:firefox中的速度令人难以置信(Chrome中需要花费5秒才能在Firefox中使用30秒),并且无法在Chrome Web Worker中运行代码 - https://code.google.com/p/chromium/问题/细节?ID = 252492

可能的解决方法:根本不使用XSL,而是使用CSS样式表显示XML.

问题:在浏览器开始实现该css attr(atrributename, url)功能之前,无法将XML属性中的文件引用视为字符串以外的任何内容,这使得无法显示图像.

可能的解决方法:将所有XSL文件合并到单个样式表中

问题:这有点可能(请参阅合并多个xslt样式表),但xsl:import和xsl:include具有特定的语义,当简单地替换文件内容代替xsl:import或xsl:include语句时,这些语义不会传递.对于在多个文件中分解的大型XSL转换,此解决方案需要大量手动工作.

可能的解决方法:将XML的内容写入iframe或新窗口.

问题:无法将XML写入新窗口或iframe.写入这些元素的内容始终假定为HTML,并插入HTML-> BODY元素.

可能的解决方法:创建一个服务器端服务,该服务接受XML,然后使用XSL stylesheet指令返回该XML.然后,服务URL可以用作srciframe或新窗口的属性.

问题:该服务必须是GET端点,这意味着要返回的XML必须作为查询参数包含在内,这意味着您最终会遇到URL长度的问题.

可能的解决方法:使用像Saxonica CE这样的javascript XSL库.

问题:这实际上可行(我还没试过),但是Saxonica CE不是开源的(这是我们项目的要求).

javascript xml xslt

16
推荐指数
1
解决办法
4286
查看次数

如何使用XSLT制作xml节点的子节点的精确副本?

我的问题是我的XML文档中包含XHTML的片段,并且在通过XSLT传递它时,我希望它能够渲染这些片段而不会破坏它们.

我已经尝试将片段包装在CDATA中,但它不起作用,因为小于和大于转换为<和>而不是直接回显.

XSL需要什么才能做到这一点?

xml xslt xhtml

3
推荐指数
1
解决办法
6240
查看次数

标签 统计

xml ×2

xslt ×2

javascript ×1

xhtml ×1