更改任何svg文件上所有元素的颜色

时间:2012-08-09 15:48:57

标签: c# xml svg

我可以轻松地在元素上添加填充(<path fill="#FF0000">),但我的问题是,它并不总是路径元素,它也可以是<rect><ellipse>和等等。

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

我的解决方案:

  • 找到支持fill属性的所有元素,然后遍历它们。

  • 只是在所有内容上加上填充标记,无论是什么标记,但并非所有标记都支持它,并且不会导致问题?

我不喜欢任何这些解决方案......第一个不是动态的,另一个不是动态的脏兮兮

我能在这里做些更聪明的事吗?我可以定义全局颜色或什么?或者svg.codeplex是否有一些我可以使用的功能(我找不到)?

2 个答案:

答案 0 :(得分:4)

你试过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这是你第一颗子弹的答案。

答案 1 :(得分:2)

使用css设置颜色。如果从元素本身中删除填充样式,则只需添加

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

或者在外部样式表中,接受填充颜色的所有内容都将为红色。您可以使用document.styleSheets[1]

操纵样式