Замена Line Iem в Xpath - PullRequest
       4

Замена Line Iem в Xpath

1 голос
/ 07 ноября 2011

У меня есть позиция вроде:

//FirstString/Second[001]/LastString

Мне нужно заменить [001] на [002] с помощью Xpath.

После замены позиция должна выглядеть следующим образом:

//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

Есть мысли?

Заранее спасибо.

Ответы [ 3 ]

1 голос
/ 07 ноября 2011

Регулярное решение:

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);
}
0 голосов
/ 07 ноября 2011

Вы должны использовать string.Replace .

var oldXpath = "//FirstString/Second[001]/LastString";
var newXPath = oldXpath.Replace("001","002");
0 голосов
/ 07 ноября 2011

Чтобы завершить ответ Кирилла, проблема с вашим решением - строка:

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

При этом ваша строка "// FirstString / Second [001] / LastString" становится "// FirstString / Second", поскольку Remove (int32), как написано в MSDN, удаляет все символы из этой строки, начинающиеся с указанная позиция и продолжается до последней позиции.

Ты должен был попробовать что-то вроде

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

Но очевидно, что решение с регулярными выражениями намного лучше.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...