В большинстве случаев, если вам нужно содержимое узла элемента 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>