【问题标题】:xsl:template & svg namespace disagreement between firefox & chromexsl:firefox和chrome之间的模板和svg命名空间分歧
【发布时间】:2015-04-07 21:52:14
【问题描述】:

我有一个似乎与 svg 命名空间有关的问题。一种方式适用于 FireFox,另一种方式适用于 Chrome,但两种方式都适用。我尝试添加 xmlns="http://www.w3.org/2000/svg",但这并不会改变结果。

在下面的模板中,'use' 和 'text' 标签以 'svg': 为前缀。这适用于 FireFox,但不适用于 Chrome。如果我删除 'svg:' 前缀,那么它在 Chrome 中有效,但在 FireFox 中无效。

有没有一种方法可以同时使用这两种方法?

    <?xml version="1.0" encoding="UTF-8"?>
    <xsl:stylesheet version="1.0" xmlns="http://www.w3.org/1999/xhtml"       xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:svg="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
<xsl:output method="html" encoding="UTF-8" indent="no"/>

<xsl:template name="attribute-header">
 <svg:use xlink:href="#attribute-value-section-banner" x="{$location-x}" y="{$banner-y}"/>
 <svg:text class="attribute-label-text" x="{$center-line}" y="{$label-y}">

【问题讨论】:

  • 请发布足够的代码 (XML+XSLT) 以使我们能够重现问题。并解释“不起作用”的确切含义。
  • 使用 XSLT 和一个应该是 (X)HTML 和 SVG 混合的结果,如果您希望它是使用命名空间的 XML,您将需要决定您想要什么样的结果文档带有您似乎想要这样做的前缀,那么您应该使用&lt;xsl:output method="xml"/&gt;。如果您想创建允许使用 HTML 和 SVG 元素的 HTML5,那么您需要确保使用不带前缀的 SVG 元素,因为 HTML5 不支持前缀和命名空间,就像您尝试使用 svg:use 一样。

标签: google-chrome firefox xslt svg namespaces


【解决方案1】:

我写了两个测试用例,一个是http://home.arcor.de/martin.honnen/xslt/test2015020801.xml,它使用样式表http://home.arcor.de/martin.honnen/xslt/test2015020801.xslxsl:output method="xml",第二个是http://home.arcor.de/martin.honnen/xslt/test2015020802.xml,它使用样式表http://home.arcor.de/martin.honnen/xslt/test2015020802.xsl&lt;xsl:output method="html"。只要输出方法是xml,XSLT 就可以生成带前缀的 SVG 元素(例如svg:circle),并且我拥有的所有三种浏览器(IE 11、Firefox 和 Chrome)都可以很好地呈现 XHTML 和 SVG。在输出方法html 的第二个测试用例中,我确保SVG 元素没有前缀,因为HTML5 和HTML 4 都不支持该语法。同样,所有三个浏览器都知道如何呈现由 XSLT 以这种方式创建的 HTML 和 SVG。

所以我假设您将 HTML 输出与 XML 命名空间和前缀限定名称混合,决定是否要使用 XSLT 创建 XML,就像在我的第一个示例中一样,您可以完全支持 XML 和带有命名空间语法的 XML,或者您是否想用您的 XSLT 创建 HTML5,然后您必须坚持不支持前缀元素名称且仅支持一些预定义属性的 HTML5 语法(请参阅http://www.w3.org/TR/html5/syntax.html#attributes-0)。这样你应该得到一致的结果。

【讨论】:

  • 谢谢。我不明白浏览器的输出应该是 XML。我想当一个人将 W3Schools 的课程混合起来制作一个网页时,就会发生这种情况。无论如何,这就是魔法。
  • 有点跑题了——我在哪里可以找到一个很好的 lint 类型的应用程序来标记这种事情?我想我误解了 xmllint 和 xsltproc 的作用。
  • 好吧,如果您使用 xsltproc 进行转换,但希望将其作为 text/html 提供给现代浏览器的 HTML5 解析器进行解析,那么您可以通过 HTML5 验证器运行您的结果文档,例如validator.nu/… 给出类似“Attribute xmlns:svg not allowed here”之类的错误。如果您直接在浏览器中执行 XSLT,那么我不确定当前是否有一个不错的工具,我不确定浏览器附带的各种开发工具的浏览器控制台是否提供任何有用的警告或错误消息。
猜你喜欢
  • 1970-01-01
  • 2017-08-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-12-29
  • 1970-01-01
  • 2020-08-21
  • 2018-06-27
相关资源
最近更新 更多