首页 文章

使用PHP循环访问SVG属性

提问于
浏览
0

使用PHP,我需要读取id的csv文件...

0123,0456,0789

...然后加载SVG XML图形文件并更改这些特定ID的颜色属性 .

SVG文件中的每个多边形都有如下记录 . 我需要更改从#d0d0d0到#FF0000的每个匹配记录中的fill:值 . 外循环当然是id,内部将是SVG文件的每个记录 .

style =“font-size:12px; fill:#d0d0d0 ; fill-rule:nonzero; stroke:#000000; stroke-opacity:1; stroke-width:0.1; stroke-miterlimit:4; stroke-dasharray:none; stroke-linecap: butt; marker-start:none; stroke-linejoin:bevel " d=" M 131.85275,310.64335 L 131.85275,311.08435“ id="0123"

对于我的业余爱好者级别的编程技巧,需要循环的一般PHP结构以及如何访问样式的特定属性的技巧将非常有用!

谢谢!布赖恩

2 回答

  • 0

    DOMDocument对象具有getelementbyid,getAttribute和setAttribute,可以让您更改xml .

    This example看起来与你想要的相似,一旦你获得了样式,你可以 explode 用';'获取样式数组,然后 join 用新样式 .

  • 0

    我建议采用不同的方法:使用CSS来改变颜色 . 不需要在那里循环使用SVG元素 . 为了能够做到这一点,你应该稍微清理SVG文件,这也会使它更紧凑 .

    据我了解,所有待着色的元素都具有与内容相同的样式属性

    font-size:12px;fill:#d0d0d0;fill-rule:nonzero;stroke:#000000;stroke-opacity:1;stroke-width:0.1;stroke-miterlimit:4;stroke-dasharray:none;stroke-linecap:butt;marker-start:none;stroke-linejoin:bevel
    

    删除这些属性,用合理的 class 属性替换它们 . 假设这些路径是 Map 上的国家/地区,然后让它们给它们一个属性 class="country" . 然后使用一个CSS规则设置所有这些样式,例如:

    .country {
      fill:  #d0d0d0;
      fill-rule:nonzero;
      stroke:#000000;
      stroke-opacity:1;
      stroke-width:0.1;
      stroke-miterlimit:4;
      stroke-dasharray:none;
      stroke-linecap:butt;
      marker-start:none;
      stroke-linejoin:bevel;
    }
    

    我放弃了 font-size 属性,因为这与 <path> 元素无关 . (可能你可以进一步简化这一点,因为很多属性会重复默认值,除非你在路径的父元素中更改这些属性, fill-rulestroke-opacitystroke-miterlimitstroke-dasharraystroke-linecapmarker-start 是多余的,但不要伤害任何人 . )

    还有一个问题:如果文件中的ID看起来确实像 012304560789 ,则这些ID无效,因为它们需要遵循XML名称的规则,这些规则不能以数字开头 . 在尝试使用其ID设置这些元素或在尝试对它们使用 getElementById() 时,您应该会遇到问题 . 所以,您可能希望将它们更改为 id0123id0456id0789

    现在,您可以从CSV数据中动态添加一些CSS .

    0123,0456,0789
    

    会成为

    #id0123,#id0456,#id0789 {fill:#FF0000}
    

    你完成了可以将CSS添加到SVG文件的 <style> 元素中,也可以创建单独的CSS文件并从SVG引用它 . 这样,在动态更改颜色时,您无需对SVG进行任何更改 . 如果在HTML中使用内联的SVG数据,还可以将其添加到HTML页面中的 <style> 元素或HTML引用的CSS文件中 .

相关问题