我正在尝试使用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不在特定节点中。它们在整个文件中是随机的。我能够通过文件的查找和替换手动执行此操作,有没有办法以编程方式执行此操作?
答案 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);