Определение местоположения узла значением, содержащим пробелы с помощью XPath

Я, честно говоря, не вижу смысла, к которому вы пытаетесь обратиться, я подозреваю, что вам просто нужна перегрузка функций:

void func(int value)
{
// Some code working with int   
}

void func(string value)
{
// Some code working with string
}

void f()
 {
     func(42); // calls the first variant
     func(string{}); // calls the second variant
 }

Нет необходимости передавать дополнительный аргумент, чтобы указать, что это за тип

9
задан zerkms 4 January 2013 в 03:49
поделиться

4 ответа

В зависимости от Вашей точной ситуации существуют различные выражения XPath, которые выберут узел, значение которого содержит некоторый пробел.

Во-первых, давайте вспомним, что любой из этих символов является "пробелом":

    	 - Вкладка

    
 - новая строка

    
 - возврат каретки

    ' ' или   - пространство

Если Вы знаете точное значение узла, говорите, что это"Hello World"с пространством, затем самое прямое выражение XPath:

    /top/aChild[. = 'Hello World']

выберет этот узел.

Трудности с определением значения, которое содержит пробел, однако, прибывают из того, что мы видим все пробельные символы так же, как... хорошо, пробел и не знаем, является ли это группой пробелов или единственной вкладки.

В XPath 2.0 можно использовать регулярные выражения, и они предоставляют простое и удобное решение. Таким образом мы можем использовать выражение XPath 2.0 в качестве того ниже:

    /*/aChild[matches(., "Hello\sWorld")]

выбрать любого ребенка главного узла, значение которого является строкой, "Привет" сопровождаемой пробелом, сопровождаемым строкой "Мир". Отметьте использование matches() функционируйте и"\s"шаблон, который соответствует пробелу.

В XPath 1.0 удобный тест, если данная строка содержит какие-либо пробельные символы:

not(string-length(.)= stringlength(translate(., ' 	

','')))

Здесь мы используем translate() функция, чтобы устранить любой из этих четырех пробельных символов и сравнить длину получившей строки к той из исходной строки.

Так, если в текстовом редакторе значение узла отображено как

"Привет    Мир",

мы можем безопасно выбрать этот узел с выражением XPath:

/*/aChild[translate(., ' 	

','') = 'HelloWorld']

Во многих случаях мы можем также использовать функцию XPath normalize-space(), который от его аргумента строки производит другую строку, в которой группы продвижения и запаздывающего пробела сокращается, и каждый пробел в строке заменяется одиночным пробелом.

В вышеупомянутом случае мы будем просто использовать следующее выражение XPath:

/*/aChild[normalize-space() = 'Hello World']

19
ответ дан 4 December 2019 в 07:24
поделиться

Попробуйте любого это:

/Root/Child[normalize-space(text())=value without spaces]

или

/Root/Child[contains(text(),value without spaces)]

или (так как это похоже, Ваше тестовое значение может быть проблемой),

/Root/Child[normalize-space(text())=normalize-space(value with spaces)]

На самом деле не выполнили ни одного из них так, синтаксис может быть wonky.

10
ответ дан 4 December 2019 в 07:24
поделиться

Вы пробовали #x20?

0
ответ дан 4 December 2019 в 07:24
поделиться

я погуглил это как на второй ссылке:

попытайтесь заменить пространство с помощью "x0020"

это, кажется, работает на парня.

0
ответ дан 4 December 2019 в 07:24
поделиться
Другие вопросы по тегам:

Похожие вопросы: