2009-11-19 30 views
0

我想寫一個的app.config/web.config中糾錯的應用程序,這將審覈我們的開發人員的應用程序不正確的環境設置。我正在使用Linq來完成這個XML,並且遇到了一個問題。更新的LINQ to XML元素值級聯發出

var query = 
    from el in doc.Descendants().Element("SMTPHost") 
    select el; 

foreach (XElement host in query) 
{ 
    if (Regex.IsMatch(el.Value, "mail.mycompany.com") 
    { 
     el.Value = Regex.Replace(el.Value, 
      "mail.mycompany.com", "devmail.mycompany.com"); 

    } 
} 

當我運行它,它加到所有的子文本值的正確元素的祖先節點之一,並刪除所有的子元素。

有沒有更好的方法來做這種事情?

謝謝!

回答

3

首先,我認爲你在這裏不需要使用正則表達式。你知道這將匹配「mailxmycompanyxcom」,因爲點是如何匹配的嗎?使用String.Contains和String.Replace。當然,如果你的真實代碼使用真正的模式,那是另一回事。

無論如何,在這個問題上。這聽起來像你一次只對處理一個單一的子節點感興趣 - 這是否正確?如果是這樣,使用:

var query = doc.Descendants() 
       .Element("SMTPHost") 
       .DescendantNodes() 
       .OfType<XText>(); 

foreach (XText textNode in query) 
{ 
    textNode.Value = textNode.Value.Replace("mail.mycompany.com", 
              "devmail.mycompany.com"); 
} 
+0

你釘了它謝謝! – 2009-11-19 21:04:18

+0

非常感謝使用OfType()的例子...今天保存了我的培根。 – CarlS 2015-01-28 02:48:37