替换Xpath中的第em行

本文关键字:em Xpath 替换 | 更新日期: 2023-09-27 18:13:56

我有一个行项目:

//FirstString/Second[001]/LastString

我需要使用Xpath将[001]替换为[002]。

替换后的行项看起来应该是:

//FirstString/Second[002]/LastString

我在c#中尝试如下:

   if (xpath.Contains("/Second") && xpath.Contains("["))
      {
        xpath = xpath.Remove(xpath.IndexOf("[")).Trim();
        xpath = xpath.Replace("Second", "Second[002]");
      }

但是它不能正常工作。

我得到的结果://FirstString/Second[002]

代替//FirstString/Second[002]/LastString

任何想法吗?

提前感谢。

替换Xpath中的第em行

正则表达式解:

var input = "//FirstString/Second[001]/LastString";
var result = Regex.Replace(input, @"(?<=Second'[)'d+(?='])", "002");

string[] input = {
                        "//FirstString/Second[001]/LastString", 
                        "FirstString/Second[003]/LastString", 
                        "FirstString/Second[004]/LastString"
                    };
var result = input.Select(s => Regex.Replace(s, @"(?<=Second'[)'d+(?='])", "002"));
foreach (var s in result)
{
    Console.WriteLine(s);
}

要完成Kirill的回答,你的解决方案的问题是:

xpath = xpath.Remove(xpath.IndexOf("[")).Trim();

通过这样做,你的行"//FirstString/Second[001]/LastString"变成了"//FirstString/Second",因为Remove(int32),正如MSDN上写的那样,从这个字符串中删除从指定位置开始并继续到最后一个位置的所有字符。

你应该试一下

xpath = xpath.Remove(xpath.IndexOf("["), "[001]".Length).Trim();

但显然正则表达式的解决方案要好得多。

您应该使用string.Replace.

var oldXpath = "//FirstString/Second[001]/LastString";
var newXPath = oldXpath.Replace("001","002");