如何替换 xml SVG 文件中每个元素的属性,然后将其保存



我有一个 svg 文件,其中包含一堆带有十六进制颜色填充的路径。我想用 #000000 替换每个填充。这是我的代码:

import xml.etree.ElementTree as ET
with open('test.svg','rwb') as f:
    tree = ET.parse(f)
    root = tree.getroot()
    for child in root:
        child.set('fill','#000000')

以下是文件的预览:

?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
<svg width="580pt" height="892pt" viewBox="0 0 580 892" version="1.1" xmlns="http://www.w3.org/2000/svg">
<path fill="#ffffff" stroke="#ffffff" stroke-width="0.09375" opacity="1.00" d=" M 0.00 0.00 L 98.71 0.00 C 99.74 6.70 101.40 13.31 101.93 20.08 C 101.30 20.48 100.05 21.27 99.43 21.67 C 99.89 20.11 100.51 18.62 101.30 17.20 C 100.32 17.88 99.34 18.57 98.36 19.26 C 98.44 20.65 98.51 22.04 98.58 23.44 C 100.03 23.85 101.49 24.18 102.96 24.51 C 107.05 47.39 110.71 70.35 114.77 93.24 C 113.83 92.52 112.88 91.79 111.94 91.07 C 111.59 91.44 110.88 92.19 110.53 92.56 C 109.57 92.01 108.62 91.45 107.66 90.90 C 105.94 80.11 104.26 69.32 102.37 58.56 C 80.86 59.15 59.32 58.64 37.79 58.71 C 38.60 65.79 38.16 72.93 38.28 80.05 C 38.25 127.38 38.45 174.71 38.42 222.04 C 38.18 284.36 38.41 346.68 37.91 408.99 C 37.76 437.92 37.96 466.85 37.70 495.77 C 79.81 488.59 121.87 481.00 163.90 473.34 C 166.79 472.80 169.78 472.60 172.55 471.57 C 169.87 463.30 169.82 454.47 167.50 446.12 C 164.86 431.63 162.59 417.08 160.09 402.57 C 161.26 401.73 162.44 400.94 163.63 400.15 C 164.06 398.68 164.45 397.09 166.10 396.54 C 166.77 401.76 168.17 406.83 169.14 411.98 C 172.24 431.18 176.04 450.26 178.72 469.52 C 181.34 471.02 184.26 469.65 187.00 469.27 C 202.91 466.41 218.81 463.45 234.72 460.57 C 249.51 458.03 264.12 454.54 278.96 452.26 C 324.66 444.04 370.39 435.99 416.05 427.56 C 423.66 426.48 431.13 424.40 438.83 424.00 C 437.96 409.60 435.82 395.30 434.51 380.93 C 431.95 354.23 428.75 327.63 426.36 300.93 C 423.51 272.25 420.00 243.65 416.97 214.99 C 409.42 143.32 401.71 71.66 394.00 0.00 L 580.00 0.00 L 580.00 892.00 L 554.84 892.00 C 555.81 746.01 555.59 600.01 555.76 454.02 C 555.64 446.70 555.97 439.38 555.65 432.06 C 521.73 437.75 487.96 444.44 454.04 450.18 C 424.84 455.40 395.74 461.10 366.49 466.04 C 363.86 466.30 361.25 466.70 358.66 467.24 C 346.29 469.60 333.90 471.92 321.45 473.82 C 321.51 474.58 321.62 476.09 321.68 476.84 L 321.18 476.92 C 321.23 476.18 321.32 474.69 321.37 473.94 C 243.97 487.52 166.65 501.45 89.26 515.10 C 89.08 511.61 90.27 508.33 91.53 505.15 C 88.62 506.48 89.56 510.75 87.53 513.03 C 86.38 514.18 85.15 515.26 83.82 516.21 C 55.86 520.86 27.99 526.08 0.00 530.48 L 0.00 0.00 Z" />

现在它运行没有错误,但是当我打开 test.svg 时,我仍然看到原始的十六进制颜色,而不是替换的颜色。.set 不能像我想象的那样工作吗?标准的 XML.etree 库还不足以做到这一点吗?

如官方文档中关于使用 ElementTree 修改 XML 文件的示例,您需要在所有修改操作完成后将ElementTree保存回文件:

.....
.....
tree.write('test.svg')

最新更新