使用c#查找和替换XML文件中的文本

时间:2013-09-11 14:57:51

标签: xml c#-4.0

我正在尝试使用c#查找和替换xml文件中的文本。我想要的是在整个文件的url链接中更改服务器名称。

http://Server1.extranet.abc/server1webdev/rest/services/ABC/ABC_Base/MapServer

http://Server2.extranet.abc/server1webdev/rest/services/ABC/ABC_Base/MapServer 

我尝试过使用     System.xml.linq(XDocument.load(xmlpath)) 但它只是给我整个xml文件作为一行字符串。有没有办法可以替换文本?请注意,url不在特定节点中。它们在整个文件中是随机的。我能够通过文件的查找和替换手动执行此操作,有没有办法以编程方式执行此操作?

3 个答案:

答案 0 :(得分:5)

如果您将整个xml文件作为字符串,则可以通过执行以下操作替换所需内容:

string oldStr = @"http://Server1.extranet.abc/server1webdev/rest/services/ABC/ABC_Base/MapServer";
string newStr = @"http://Server2.extranet.abc/server1webdev/rest/services/ABC/ABC_Base/MapServer ";

doc.Replace(oldStr, newStr);

但通常如果你想在xml中更改标签的值,我可以建议一个例子,你可以在xml中使用它:

     XDocument doc = XDocument.Load("D:\\tst.xml");
     foreach (XElement cell in doc.Element("Actions").Elements("Action"))
     {
        if (cell.Element("ActionDate").Value == oldStr)
        {
           cell.Element("ActionDate").Value = newStr;
        }
     } 

     doc.Save("D:\\tst.xml");

答案 1 :(得分:0)

使用XDocument当前没有内置的方法来替换整个文件中的文本。 但是,您可以做的是

XDocument document = XDocument.LoadFrom(path);
var docText = document.ToString().Replace(urlA, urlB);
using (var reader = new StringReader(docText))
    document = XDocument.Load(reader, LoadOptions.None);

这并不理想,但至少是一种解决方法。

答案 2 :(得分:0)

List<XElement> allElements = xmlDocument.Descendants().ToList();
foreach (XElement element in allElements.Where(e => e.Value == oldstring))
{
    element.Value = newstring
}

或者,Where 子句可以有一个 Contains,而 Value 可以使用字符串替换。

加载 XDocument 时保留行号的小贴士,如果您要进行验证,这将非常方便:

XDocument xmlDocument = XDocument.Load(xmlFile, LoadOptions.SetLineInfo);