2014-05-06 34 views
0

我需要能夠解析包含XML的字符串並通過修改標記來「修復」它。例如,我需要替換所有出現的fontSize="16"fontSize="16px".找到字符串的出現並有效地插入新字符串

在c#和.NET中這樣做的有效(但可讀)方式是什麼?我在一段時間內開始使用IndexOf的路線,但認爲必須有更好的方法來做到這一點。

+1

['.Replace()'](http://msdn.microsoft.com/en-us/library/fk49wtc1% 28V = vs.110%29.aspx)? – Bobson

+0

感謝Bobson,但我不會每次都知道確切的搜索字符串。即,fontSize =「是常量,但值不是 –

+0

您是否嘗試過正則表達式(假設這不是XML或HTML數據,其中可能存在其他更安全,更高效的方法) –

回答

7

嘗試Regex.Replace()

Regex.Replace(inputText, @"fontSize=""(\d+)""", @"fontSize=""$1px""") 

第二個參數認定的fontsize="..."所有實例,其中...僅表示數字。由於有以下",它不會與16px中的任何內容匹配。第三個參數告訴它用什麼替換匹配 - 在這種情況下,相同的字符串在數字($1)後面添加了額外的px

+0

感謝Bobson的答案和清晰的解釋。現在嘗試。 Dave –

3

如果你使用XML,我會使用正確的工具來完成這項工作:XDocument。下面是一個例子:

var input = @" 
<root> 
    <someTag fontSize=""16"" /> 
    <someTag otherAttribute=""12"" /> 
</root>"; 

var doc = XDocument.Parse(input); 

var allAttributes = doc.Descendants().Attributes(); 

var fontSizeAttributes = allAttributes.Where(x => x.Name == "fontSize"); 

foreach (var f in fontSizeAttributes) 
    f.Value = Regex.Replace(f.Value, "^([0-9].)$", "$1px"); 

結果doc含有:

<root> 
    <someTag fontSize="16px" /> 
    <someTag otherAttribute="12" /> 
</root> 
+0

這不會用'fontSize =「16pxpx」'替換現有的'fontSize =「16px」'嗎?你需要在正則表達式中使用周圍的引號。除此之外,如果必須將其視爲XML,我就會這麼做。 – Bobson

+0

噢,好吶喊...我會更新。 –