我想将来自不同源文档的几个SVG片段合并到一个结果文档中。为了避免ID冲突,我必须通过在每个源文档前面添加一个唯一的字符串来“命名”它们。
我可以使用XPath查找SVG文档中的所有ID声明(例如//@id
)。我可以通过直接操作DOM或通过执行一些正则表达式向导(或两者的组合)来替换ID。 作为旁注:我正在用PHP做这一切,速度/性能并不重要,所以正则表达式替换就好了。
到目前为止,我正在使用本地名称id
作为ID声明处理任何属性,例如
<clipPath id="a">...</clipPath>
我成功替换了这种语法的相应IDREF(即在#
之前):
<g clip-path="url(#a)">...</g>
现在这些是我的问题:
id
且属于ID声明的属性外,是否还有其他任何属性?哪些?#
之外,SVG中还有其他IDREF语法吗?哪些?感谢任何提示! :)
答案 0 :(得分:1)
从理论上讲,可以说任何一个特定属性都是带有DOCTYPE声明的ID类型。请参阅XML specification。但是,每个元素只允许一个ID属性(有效性约束)。在任何情况下,如果您确实向SVG添加了自定义ID属性,我认为它不再是SVG内容。
另一种可能性是xml:id
,这是不鼓励的。请参阅SVG Tiny 1.2。
你是什么意思? url(...)
内的语法是IRI,因此它可以是例如http://example.com/example.svg#foo
。它通常只是一个片段,但并非总是如此。
svg规范的linking chapter,xml规范和xml:id规范。
某些CSS选择器只能在一个特定的svg文档中工作(取决于)。如果在合并两个文档时更改了ids,则可能还需要更新样式表以将其考虑在内。