2012-08-09 112 views
1

我可以很容易地在元素上添加填充(<path fill="#FF0000">),但我的问题是,它并不总是一个路径元素,它也可以是<rect><ellipse>等。更改任何svg文件上所有元素的颜色

但是如果我想更改svg文件中所有元素的颜色?不管它是什么类型?

我的解决方案:

  • 找到支持填充属性,然后遍历所有这些元素。

  • 只需在所有内容上放一个填充标签,不管标签是什么,但不是所有的标签都支持它,并且不会导致问题?

我不喜欢任何这些解决方案的......首先是不是动态的,另一种是不动态脏

有什么更聪明,我可以在这里做?我可以定义一个全球颜色或东西?或者svg.codeplex有一些功能,我可以使用(我找不到)?

回答

2

使用CSS设置颜色。如果从内容中删除填充样式本身,那么你可以再补充

<style type="text/css"> 
    <![CDATA[ 
    * { 
     fill: #FF0000; 
    } 
    ]]> 
</style> 

或可选择地在接受填充颜色为红色外部样式表和一切。您可以使用document.styleSheets[1]

+0

谢谢。但事情是。我需要在服务器上完成它。但做这个CSS代码和我的第二个脏解决方案一样吗? – BjarkeCK 2012-08-09 17:08:24

+0

因此,在服务器上用任何你想要的填充来创建样式元素。 – 2012-08-09 18:29:45

2

您是否尝试过XPath? (使用System.Xml.XPath)

string newColor = "#123456"; 
XElement root = XElement.Load(file); 
var colors = root.XPathSelectElements("//*[@fill]"); 
foreach(XElement node in colors) 
    node.Attribute("fill").Value = newColor; 

PS这是您的第一个项目符号的答案。