7

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 ファイル全体が 1 行の文字列として表示されるだけです。テキストを置き換える方法はありますか?URL は特定のノードにあるわけではないことに注意してください。ファイル全体でランダムです。ファイルの検索と置換を使用して手動でこれを行うことができますが、プログラムでこれを行う方法はありますか?

4

3 に答える 3

10

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");
于 2013-09-11T15:03:38.170 に答える
0
List<XElement> allElements = xmlDocument.Descendants().ToList();
foreach (XElement element in allElements.Where(e => e.Value == oldstring))
{
    element.Value = newstring
}

またはWhere、節に を指定し、文字列置換を使用することもできますContainsValue

XDocument をロードするときに行番号を保持するための副次的なヒント。これは、検証を行う場合に非常に便利です。

XDocument xmlDocument = XDocument.Load(xmlFile, LoadOptions.SetLineInfo);
于 2021-02-25T18:05:46.190 に答える