Выход генерируется из-за встроенных шаблонных правил , которые:
- копировать текстовые узлы для вывода
- применять шаблоны к элементам
Соответствующий раздел Рекомендации XSLT 1.0 включен ниже.
Возможно, вы просто захотите шаблон ничего не делать для SOAP-ENV: заголовок.
<xsl:template match="SOAP-ENV:Header">
</xsl:template>
Некоторые элементы в вашем исходном документе не находятся в пространстве имен. В выражении XPath элементы, которые не имеют пространства имен, могут указываться по их буквальному локальному имени. Вам нужно использовать local-name()
, только если вы не знаете пространства имен для элемента.
Вот модифицированная версия вашей таблицы стилей. Он начинается с шаблона, соответствующего /
, а затем явно выбирает нужные нам узлы.
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/">
<xsl:output method="html" indent="yes" omit-xml-declaration="yes"/>
<xsl:template match="/">
<html>
<xsl:apply-templates select="SOAP-ENV:Body/Publisher" />
</html>
</xsl:template>
<xsl:template name="Publisher">
<body>
<br/>
<center>
<font face="arial" size="2">
<b>
<xsl:text>Publisher </xsl:text>
<xsl:value-of select="Organization/PublisherData/PublisherName"/>
</b>
</font>
</center>
<br/>
<xsl:apply-templates select="Organization"/>
</body>
</xsl:template>
</xsl:stylesheet>
Встроенные правила шаблонов
Существует встроенное шаблонное правило для
разрешить рекурсивную обработку продолжить
при отсутствии удачной картины
совпадать по явному шаблону правила в
таблица стилей. Это шаблонное правило
относится как к элементам узлов, так и к
корневой узел. Следующее показывает
эквивалент встроенного шаблона
Правило:
<xsl:template match="*|/">
<xsl:apply-templates/>
</xsl:template>
Также есть встроенное шаблонное правило
для каждого режима, который позволяет рекурсивный
обработка продолжается в том же
режим при отсутствии удачного
сопоставление с образцом по явному шаблону
Правило в таблице стилей. Этот шаблон
Правило применяется как к элементам узлов, так и к
корневой узел. Следующее показывает
эквивалент встроенного шаблона
Правило для режима м.
<xsl:template match="*|/" mode="m">
<xsl:apply-templates mode="m"/>
</xsl:template>
Также есть встроенное шаблонное правило
для текстовых и атрибутных узлов, которые
копирует текст через:
<xsl:template match="text()|@*">
<xsl:value-of select="."/>
</xsl:template>
Встроенное шаблонное правило для
инструкции по обработке и комментарии
это ничего не делать.
<xsl:template match="processing-instruction()|comment()"/>
Встроенное шаблонное правило для
Узлы пространства имен тоже ничего не делают.
Там нет шаблона, который может соответствовать
узел пространства имен; Итак, встроенный
шаблонное правило - единственный шаблон
правило, которое применяется для пространства имен
узлы.
Встроенный шаблон правил
рассматривается как если бы они были импортированы
неявно перед таблицей стилей и
поэтому имеют более низкий приоритет импорта, чем
все остальные правила шаблона. Таким образом
автор может переопределить встроенный
шаблонное правило путем включения явного
шаблонное правило.