代码之家  ›  专栏  ›  技术社区  ›  Jeremy E

将linq更新为xml元素值串联问题

  •  0
  • Jeremy E  · 技术社区  · 16 年前

    我正在尝试编写一个app.config/web.config纠错应用程序,它将审核我们的开发人员应用程序的错误环境设置。我正在使用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");
    
        }
    }
    

    当我运行这个命令时,它连接正确元素的一个祖先节点的所有子文本值,并删除所有子元素。

    有没有更好的方法来做这种事情?

    谢谢!

    1 回复  |  直到 12 年前
        1
  •  3
  •   Jon Skeet    16 年前

    首先,我认为这里不需要使用正则表达式。您知道匹配“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");
    }