Ну, реальный вопрос: в чем разница между .
и text()
?
.
- это текущий узел.И если вы используете его там, где ожидается строка (т. Е. В качестве параметра normalize-space()
), механизм автоматически преобразует узел в строковое значение узла, которое для элемента - это все текстовые узлы в объединенном элементе.(Поскольку я предполагаю, что вопрос действительно об элементах.)
text()
, с другой стороны, выбирает только текстовые узлы, которые являются прямыми дочерними элементами текущего узла.
Так, например, учитывая XML:
<a>Foo
<b>Bar</b>
lish
</a>
и предполагая, что <a>
является вашим текущим узлом, normalize-space(.)
вернет Foo Bar lish
, но normalize-space(text())
не удастся, потому что text()
возвращает набор узлов из двух текстовых узлов (Foo
и lish
), которые normalize-space()
не принимает.
Короче говоря, если вы хотите нормализовать весь текст внутриэлемент, используйте .
.Если вы хотите выбрать определенный текстовый узел, используйте text()
, но всегда помните, что, несмотря на его имя, text()
возвращает набор узлов, который автоматически преобразуется в строку, только если у него есть один элемент.