Xpath условная ветвь - PullRequest
0 голосов
/ 24 июня 2019

Я новичок в XPath и хочу провести различие между этими 2 XPath.

1) /*/*:Employee/*:Firstname/*:Name[contains(.,abc)]
2) /*/*:Employee/*:Firstname/*:Name[abc]

Я пытался Google, но у меня нет четкого представления.

Не могли бы выпожалуйста, объясните эту разницу простым способом?

1 Ответ

2 голосов
/ 24 июня 2019

contains - это строковая функция, которая проверяет, содержит ли первая строка вторую строку (или, если хотите, если вторая строка является подстрокой первой).Если аргументом строковой функции является узел (например, Name), он получит строковое значение этого узла для использования.Он не используется для проверки, содержит ли узел определенный дочерний узел.

Итак, Name[contains(.,abc)] говорит: «Содержит ли строковое значение элемента Name строковое значение дочернего элемента abc? "

Это странная вещь, потому что она всегда будет верна для всех Name элементов.Строковое значение узла включает в себя текст всех потомков.И если бы не было дочернего элемента abc, строковое значение было бы пустой строкой, и поэтому выражение все равно было бы истинным.

Например, если узел был <Name>1<abc>2</abc></Name> строковое значение Name будет "12", что, очевидно, содержит строковое значение abc, которое равно "2".

С другой стороны, Name[abc] получает элемент Name, если дочерний элемент abcсуществует независимо от значения строки.Таким образом, оно будет соответствовать <Name><abc /></Name>, но не <Name/>.

(возможно, первое выражение должно быть Name[contains(.,'abc')], в этом случае оно будет соответствовать Name элементам, содержащим строку «abc».Таким образом, это будет соответствовать <Name>abcdef</Name>, но не <Name>cdefgh</Name>)

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