Chrome的xslt处理器出了什么问题?有时空白输出

时间:2017-12-15 16:21:14

标签: google-chrome xslt svg

前段时间我编写了一个将Eagle(PCB CAD)文件转换为SVG的XSLT“程序”。它在Firefox和Internet Explorer上运行。

但是,在当前版本的Chrome和Chromium上,它有时无效。

这个工作原理并将原理图显示为SVG:

http://www.tu-chemnitz.de/~heha/enas/STS%20Multiplex/MFC-Verteiler.zip/MFC4.sch?as=SVG

虽然非常相似甚至更短,但这个会显示一个空白屏幕:

http://www.tu-chemnitz.de/~heha/enas/UDX5114N.zip/sm5.sch?as=SVG

两个示例URL都下载了正版Eagle XML原理图文件,让浏览器在没有Javascript的情况下转换为SVG。

是否有人知道如何追踪问题,即使可能? (有没有像Chrome的XSLT调试器?)

如果重要,我使用Windows 7 64位德语。

2 个答案:

答案 0 :(得分:1)

我不确定这是Chrome的问题,似乎你的样式表有时会生成带有嵌入式SVG的HTML,有时会尝试输出SVG文档,但只能在根元素上获取SVG名称空间和一些容器元素,内容然后在没有命名空间中创建元素,例如结束为<text font-size="2.1336" transform="translate(13.97,154.94)scale(1,-1)" text-anchor="end" fill="#088" xmlns="">black</text>。因此,无论您希望使用XSLT输出SVG元素,都应确保使用正确的命名空间输出它们,或者使用文字结果元素,例如: <text xmlns="http://www.w3.org/2000/svg">..</text>其中命名空间也可以出现在样式表中文字结果元素的祖先上,或者使用<xsl:element namespace="http://www.w3.org/2000/svg" name="text">...</xsl:element>,其中命名空间声明也可以出现在{{1}的祖先元素上在样式表中。将命名空间放在您在不同模板中生成的结果树的祖先元素上会导致在无命名空间中创建元素。

对于Firefox,您的样式表的工作方式不同,并为这些SVG元素插入前缀(xsl:element),其中前缀与根上的现有名称空间声明一起将元素放在右侧命名空间中。不确定为什么IE和Edge会呈现结果,除了它们似乎将所有内容放入HTML包装器并忽略HTML5方式的命名空间。

答案 1 :(得分:0)

我知道我的XSLT:为Firefox生成SVG名称空间而为Internet Explorer生成SVG名称空间是唯一的方式,使其在两种浏览器上都能正常工作。此外,由于第一个给出的示例在Chrome(以及我的大部分原理图)中运行良好,Chrome似乎没有丢失名称空间的问题,它与IE兼容,我希望第二个例子还有另一个原因不会工作。