Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/csharp-4.0/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用c查找和替换XML文件中的文本#_Xml_C# 4.0 - Fatal编程技术网

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

使用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不在特定节点中。它们在整个文件中是随机的。我可以通过文件

我正在尝试使用c#查找并替换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);