У меня есть следующий код, и я хочу выбрать ярлык по тексту. Я не могу использовать //label[text()='some label']
или //label[text()='other label']
по двум причинам:Как выбрать узел по тексту, опускающий текст дочерних узлов
- '// метка [текст()] возвращает все содержимое текущего узла, включая содержание SPAN в,
- белые пространства.
Я могу использовать содержит() функцию, но я действительно НЕ хочу.
<label>
<span>some span</span>
some label
</label>
<label>
other label
<span>other span</span>
</label>
SOLVED ???
//label[normalize-space(text()) = 'some label']
Но почему это полоски внутренних узлов? Я не понимаю. Согласно http://www.w3.org/TR/xpath/#function-normalize-space, необходимо удалить только пробелы, но не узлы.
Какой синтаксис лучше: // label [text() [normalize-space() = 'some label']] vs // label [normalize-space (text()) = 'some label'] –
И что гораздо важнее, почему normalize-space() выравнивает внутренние узлы. Для меня это важно понять. –
Вам нужно будет объяснить, что такое «внутренний узел» и какое поведение вы заметили, которое хотите объяснить, когда говорите «normalize-space() обрезает внутренние узлы». Основное различие между моим предложением '// label [text() [normalize-space() = 'some label']]' и вашим кодом заключается в том, что мое предложение выбирает элементы label, которые имеют (по крайней мере) текстовый дочерний узел чье нормализованное строковое значение является «некоторой меткой», поэтому ваша попытка выбирает элементы «label», где первый текстовый дочерний узел имеет нормализованное строковое значение «some label». И с вашим образцом первый текстовый дочерний узел - это пробел. –