конечно, неполно. Если я, с другой стороны, буду выбирать по образцу "
@*|node
" вместо "
@*|*
", новое правило шаблона выберет все узлы за исключением корневого узла (который создается в результирующем дереве автоматически), поэтому символы-разделители будут скопированы, так же как и текст (листинг 4.4).
". Как правило, нет особых причин применять условие узла
text
. В XSLT существует правило по умолчанию, в соответствии с которым текст текстового узла включается в выходной документ, если этот узел не выбирается какими-либо другими правилами. Если нужно сделать это правило по умолчанию явным, можно поступить, например, так:
<xsl:template match="text">
<xsl:value-of select="."/>
</xsl:template>
Можно перекрыть это правило, не отправляя текст из текстовых узлов в выходной документ, — в том числе так:
<xsl:template match="text">
</xsl:template>
Потребность в применении условия текстового узла возникает, например, когда нужно выбрать узлы с определенным текстом. Предикат "
NAME[text='Venus']
" выбирает элементы
<NAME>
, в которых содержится имя "
Venus
". (Будьте внимательны с вложением кавычек, чтобы процессор XSLT не ошибся, — например, такой предикат не работает: "
NAME[text="Venus"]
".) Еще одна причина для использования условия текстового узла появляется, когда требуется применить к текстовым узлам некоторое условие при помощи строковых функций XPath (которые будут рассмотрены позже в этой главе). Например, текстовый узел "
Earth
" в
<NAME>Earth</NAME>
выбирается образцом "
text[starts-with(.,'Е')]
".
КАК УБРАТЬ КОММЕНТАРИИ
Ранее мы видели, что образец "@*|node" (в котором используется операция OR, обсуждаемая позже) выбирает из файла planets.xml все, включая комментарии. Если вы хотите убрать комментарии, воспользуйтесь образцом "@*|*|text", который сохраняет только элементы, атрибуты и текстовые узлы.
Выбор инструкций обработки
Для выбора инструкций обработки используйте образец
processing-instruction
:
<xsl:template match="/processing-instruction">
<I>
Found a processing instruction.
</I>
</xsl:template>
Можно также указать, какую именно инструкцию обработки вы хотите выбрать, задав имя инструкции (исключая
<?
и
?>
), — как в следующем примере, в котором выбирается инструкция обработки
РАЗЛИЧИЕ МЕЖДУ КОРНЕВЫМИ УЗЛАМИ И КОРНЕВЫМИ ЭЛЕМЕНТАМИ
Одна из основных причин различия корневого узла в самом начале документа и корневого элемента заключается в том, что при этом у вас есть доступ к инструкциям обработки и другим узлам в прологе документа.