Разница между text() и string()

Кто-нибудь может объяснить разницу между функциями text() и string(). Я часто использую одну с другой, но это не имеет никакого значения, обе получат строковое значение узла xml.

29
задан Nakilon 14 April 2016 в 16:04
поделиться

1 ответ

В большинстве случаев, если вам нужно содержимое узла элемента X, вы можете ссылаться на него как «.», Если это узел контекста, или как «X», если это дочерний узел узла контекста. Например:

<xsl:if test="X = 'abcd'">...

или

<xsl:value-of select="."/>

В обоих случаях, поскольку контекст требует строку, функция string() применяется автоматически. (Это небольшое упрощение, если вы используете XSLT 2.0 с поддержкой схемы, правила немного сложнее).

Использование «string()» здесь не нужно, потому что это делается автоматически; и использование text() является ошибкой (которая становится все более распространенной, поощряемой некоторыми плохими учебниками в сети). Использование ./text() или X/text() в этой ситуации дает вам все дочерние элементы текстового узла элемента. Часто у элемента есть один дочерний текстовый узел, строковое значение которого совпадает со строковым значением элемента, но ваш код завершается ошибкой, если кто-то добавляет комментарий или инструкцию обработки, потому что значение затем разделяется на несколько текстовых узлов. Он также завершается ошибкой, если элемент равен единице (скажем, «title»), который допускает смешанное содержимое: string(title) и title/text() будут давать один и тот же ответ, пока вы не нажмете статью с заголовком

<title>On the wetness of H<sub>2</sub>O</title>
11
ответ дан 28 November 2019 в 01:17
поделиться
Другие вопросы по тегам:

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