使用c查找和替换XML文件中的文本#
我正在尝试使用c#查找并替换xml文件中的文本。我想要的是在整个文件中更改url链接中的服务器名称使用c查找和替换XML文件中的文本#,xml,c#-4.0,Xml,C# 4.0,我正在尝试使用c#查找并替换xml文件中的文本。我想要的是在整个文件中更改url链接中的服务器名称 http://Server1.extranet.abc/server1webdev/rest/services/ABC/ABC_Base/MapServer 到 我试着用 System.xml.linq(XDocument.load(xmlpath)) 但它只是将整个xml文件作为一行字符串提供给我。有什么方法可以替换文本吗?请注意,url不在特定节点中。它们在整个文件中是随机的。我可以通过文件
http://Server1.extranet.abc/server1webdev/rest/services/ABC/ABC_Base/MapServer
到
我试着用
System.xml.linq(XDocument.load(xmlpath))
但它只是将整个xml文件作为一行字符串提供给我。有什么方法可以替换文本吗?请注意,url不在特定节点中。它们在整个文件中是随机的。我可以通过文件的“查找和替换”手动执行此操作,是否有一种编程方式执行此操作?如果您将整个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");
使用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);
这并不理想,但至少是一个解决办法。简单的
String.Replace
:xmlString=xmlString.Replace(oldUrl,newUrl)
?对,如果你只是做这样一个简单的替换,为什么还要费心解析它呢?我需要对很多文件进行解析,而且在某些情况下,我可能需要更改url中的其他文本,@lazyberezovsky,你能详细说明一下吗?如何提取xml字符串?它在整个文件中是随机的,不在任何特定节点中。Thanks@lazyberezovsky您好,您对xmlString=xmlString.Replace(oldUrl,newUrl)的很多想法都很有效。我建议将xml转换为字符串,替换内容并将其解析为xml。酷!嗨,不知道名字,谢谢你的回复,难道没有办法简单地替换文本吗?url放置在随机元素/节点中,我无法精确定位它们。另外,对于第一部分,我找不到doc.Replace,只有doc.ReplaceWith(对象),它需要节点。其次,我只想替换部分文本,而不是整个url,还有其他方法吗?Thanks@GBh您找不到doc,因为我不知道您是如何调用字符串的,但您说您将整个文件作为字符串,因此可以在字符串上调用Replace。@GBh此外,如果要使用xDocument,您可以在子节点上递归搜索给定url的值
List<XElement> allElements = xmlDocument.Descendants().ToList();
foreach (XElement element in allElements.Where(e => e.Value == oldstring))
{
element.Value = newstring
}
List<XElement> allElements = xmlDocument.Descendants().ToList();
foreach (XElement element in allElements.Where(e => e.Value == oldstring))
{
element.Value = newstring
}
XDocument xmlDocument = XDocument.Load(xmlFile, LoadOptions.SetLineInfo);