外部定义的标记不会出现在SVG中

Zso*_*t T 6 svg reference marker

我正在尝试将标记统一为一堆SVG图像.我的问题是我不能在标记定义中使用外部引用.它可能连接到问题如何正确引用svg中的外部svg文件?但仍然缺少一个链接.

我举了一个例子来证明我的问题:

b.svg(引用):

<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" version="1.1">
    <defs>
        <circle id="b" r="6" stroke="black" fill="green" />
        <marker id="b_end"
          orient="auto"
          style="overflow:visible">
            <use xlink:href="#b" />
        </marker>
    </defs>
</svg>
Run Code Online (Sandbox Code Playgroud)

a.svg(试图引用b.svg):

<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" version="1.1">
    <defs>
        <circle id="a" r="6" stroke="black" fill="yellow" />
        <marker id="a_end"
          orient="auto"
          style="overflow:visible">
            <use xlink:href="#a" />
        </marker>
        <marker id="b_end"
          orient="auto"
          style="overflow:visible">
            <use xlink:href="b.svg#b" />
        </marker>
    </defs>
    <path d="m 10,10 20,20" style="marker-end:url(#a_end)" stroke="black" />
    <path d="m 40,10 20,20" style="marker-end:url(#b_end)" stroke="black" />
    <path d="m 70,10 20,20" style="marker-end:url(b.svg#b_end)" stroke="black" />
</svg>
Run Code Online (Sandbox Code Playgroud)

正如您所看到的,我通过内部id引用了第一行的标记(实际上是两个,因为标记也有引用).这很好用.

我使用内部标记定义和第二行的外部路径.它不起作用.(线是显示的,标记不是.)

我在第三行使用了外部标记.它也不起作用.

问题可能是外部内容不在托管DOM中 - 至少在样式中的引用被解析时不是这样.

好的,但我该怎么办呢?如何在SVG中引用标记的外部元素?

Zso*_*t T 1

我想我可以根据我的实验和罗伯特留下的评论来回答我原来的问题。

我编写的代码应该可以在 SVG 中运行,并且可以在 Opera 和 Firefox 中运行。另外,它在使用 Apache FOP 生成 PDF 时有效,这对我来说是关键点。

唯一的问题是外部引用在 IE、Chrome 和 Safari 中不起作用。我不确定 Firefox 何时实现了来自样式定义的外部引用:它在 7.0 中不起作用,但在 11 中起作用。