Я написал xslt, который читает
некоторые имена файлов XML и делает некоторые
операции на них. Я использую для каждого
работать их один за другим. У меня есть каждый
путь внутри параметра $ path.
Но теперь я хотел бы вывести
результат применения внешнего
таблица стилей для этих файлов
Раствор состоит из следующих ингредиентов :
Используйте стандартную функцию XSLT document()
для загрузки и доступа к внешнему документу XML.
Импортировать внешнюю таблицу стилей, используя инструкцию <xsl:import>
.
Шаблоны во внешней таблице стилей должны находиться в специальном режиме , не используемом основной таблицей стилей.
В том месте, где требуется результат "внешнего преобразования", введите <xsl:apply-templates>
, выбрав необходимые узлы внешнего документа (обычно корневой узел /
или верхний элемент /*
) , Режим, указанный в <xsl:apply-templates>
, должен совпадать с режимом, используемым во внешней таблице стилей.
Вот небольшой упрощенный пример (внешняя таблица стилей не импортируется, «внешний документ» встроен в таблицу стилей и режим не используется):
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns="http://www.w3.org/1999/xhtml"
xmlns:my="my:my"
>
<!-- <xsl:import href="myExternal.xsl"/> -->
<xsl:output omit-xml-declaration="yes" indent="yes"/>
<my:div>
<h2>Weather</h2>
<p >It will be raining today</p>
</my:div>
<xsl:template match="node()|@*">
<xsl:copy>
<xsl:apply-templates select="node()|@*"/>
</xsl:copy>
</xsl:template>
<xsl:template match="insertContents">
<xsl:apply-templates select="document('')/*/my:div/*"/>
</xsl:template>
</xsl:stylesheet>
Когда это преобразование применяется к этому документу XML :
<html>
<h1>Today's News </h1>
<insertContents/>
</html>
желаемый результат получается :
<html>
<h1>Today's News </h1>
<h2 xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:my="my:my">Weather</h2>
<p xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:my="my:my">It will be raining today</p>
</html>
Обратите внимание , что приведенные выше посторонние пространства имен связаны только с упрощениями этого примера - они не будут генерироваться, если внешний XML-документ находился в своем собственном файле.