Вы находитесь в выражении XPath в строковом литерале, а не в XML, поэтому &
вовсе не является спасением (и даже если бы оно было, это было бы &
, а не '
). Вы буквально сопоставляете атрибуты name
со значением Peter O&Toole
, т.е. с атрибутами, которые будут записаны в XML как name="Peter O&Toole"
.
Строковые литералы XPath могут использовать кавычки любого типа, поэтому это выражение будет работать:
/table/user[@name="Peter O'Toole"]/row
Что для включения в строковый литерал Obj-C потребовалось бы снова экранировать двойные кавычки:
NSString* xPath = @"/table/user[@name=\"Peter O'Toole\"]/row";
Если у вас есть оба вида цитат в строке, которую вы хотите сопоставить, у вас больше проблем. Строковые литералы XPath не имеют экранирующей схемы, поэтому невозможно указать значение с "
и '
. Вы должны сделать это путем объединения строк, содержащих только один тип кавычек. Поэтому для произвольных строк может быть проще выполнить итерацию и сравнение вручную, чем использовать XPath.