2012-08-09 106 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這是您的第一個項目符號的答案。