使用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 回答
DOMDocument对象具有getelementbyid,getAttribute和setAttribute,可以让您更改xml .
This example看起来与你想要的相似,一旦你获得了样式,你可以
explode
用';'获取样式数组,然后join
用新样式 .我建议采用不同的方法:使用CSS来改变颜色 . 不需要在那里循环使用SVG元素 . 为了能够做到这一点,你应该稍微清理SVG文件,这也会使它更紧凑 .
据我了解,所有待着色的元素都具有与内容相同的样式属性
删除这些属性,用合理的
class
属性替换它们 . 假设这些路径是 Map 上的国家/地区,然后让它们给它们一个属性class="country"
. 然后使用一个CSS规则设置所有这些样式,例如:我放弃了
font-size
属性,因为这与<path>
元素无关 . (可能你可以进一步简化这一点,因为很多属性会重复默认值,除非你在路径的父元素中更改这些属性,fill-rule
,stroke-opacity
,stroke-miterlimit
,stroke-dasharray
,stroke-linecap
和marker-start
是多余的,但不要伤害任何人 . )还有一个问题:如果文件中的ID看起来确实像
0123
,0456
或0789
,则这些ID无效,因为它们需要遵循XML名称的规则,这些规则不能以数字开头 . 在尝试使用其ID设置这些元素或在尝试对它们使用getElementById()
时,您应该会遇到问题 . 所以,您可能希望将它们更改为id0123
,id0456
和id0789
现在,您可以从CSV数据中动态添加一些CSS .
会成为
你完成了可以将CSS添加到SVG文件的
<style>
元素中,也可以创建单独的CSS文件并从SVG引用它 . 这样,在动态更改颜色时,您无需对SVG进行任何更改 . 如果在HTML中使用内联的SVG数据,还可以将其添加到HTML页面中的<style>
元素或HTML引用的CSS文件中 .