【问题标题】:How to copy attributes from a SVG to another?如何将属性从 SVG 复制到另一个?
【发布时间】:2019-01-02 10:10:18
【问题描述】:

我有两个相同的 SVG,但我更改了内部的一些值,例如:

SVG1

<desc
   id="desc20622">[Visualization]
       name=H131B1;
</desc>

另一个是:

SVG2

<desc
   id="desc20622">[Visualization]
       name=R131C2;
</desc>

现在我在一个 SVG 中重新分配了很多元素,我想将这些更改复制到另一个 SVG。使用这些 SVG、比较 id、将值从 SVG2 复制到 SVG1 并保存新的 SVG 文件的最简单方法是什么? 我熟悉一堆编程语言,但我正在研究 Python 以使用 minidomxml.etree.ElementTree 完成这项工作。

有人可以帮助我吗?提前致谢。

【问题讨论】:

  • 如果一开始两个 SVG 相同,而您对其中一个进行了更改,那么仅仅复制它还不够吗?
  • SVG 有将近 50k 行,我花了很多时间来更改值,不想在上面浪费更多时间,如果我必须更改再次处理元素!
  • 可能我没完全理解你:SVG只是文本文件,你可以使用版本控制系统(例如git)。然后,您将拥有您对 SVG 所做的所有历史记录。
  • 我知道!我确实有它的版本,但关键是我有那个巨大的 SVG,将它复制到另一个,并改变了之前写的值。现在我已经更改了其中很多的绘图位置,并希望复制的 svg 具有相同的位置,所以我有 2 个选择:1-更改每个元素的位置 ex。 transform="translate(1040.8435.346.27772)"transform="translate(-10,-9.31067)" 或 2-copy 并更改值 ex。将 H131B1 更改为 R131C2

标签: python xml svg


【解决方案1】:

我想出了如何用 Python 自己完成。

import xml.etree.ElementTree as ET

tree1 = ET.parse('SVG1.svg')
root1 = tree1.getroot()

tree2 = ET.parse('SVG2.svg')
root2 = tree2.getroot()

for child1 in root1.iter('desc'):
    for child2 in root2.iter('desc'):
        if child1.attrib == child2.attrib:
            child1.text = child2.text
            break

tree1.write('output.svg')

只需要解析两个 SVG,迭代每个 desc 比较 id 并复制文本!

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-09-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-12
    • 2014-02-27
    相关资源
    最近更新 更多