Как вызвать преобразование xslt в таблицу стилей xsl - PullRequest
1 голос
/ 15 мая 2010

Я написал xslt, который читает некоторые имена файлов XML и выполняет с ними некоторые операции.
Я использую для каждого, чтобы работать их один за другим. У меня есть каждый путь внутри параметра $ path.

Но теперь я хотел бы вывести результат применения внешней таблицы стилей к этим файлам. Я бы написал что-то вроде

<div> <something like xsl-transform($extern-xslt,$path)> </div>

чтобы иметь дерево результатов преобразования внутри основного вывода html. Это возможно?

Ответы [ 3 ]

2 голосов
/ 15 мая 2010

Вы можете импортировать внешнюю таблицу стилей в основную таблицу стилей с помощью xsl:import, а затем просто применить шаблоны к этому внешнему XML-файлу, который вы можете загрузить с помощью document функция.

<div><xsl:apply-templates select="document($path)"/></div>

Если шаблоны во внешней таблице стилей будут сталкиваться с шаблонами в основной таблице стилей, вы можете использовать для них другой режим .

1 голос
/ 15 мая 2010

Вы можете использовать функцию document() XPath для загрузки внешнего XML-файла. Это возвращает набор узлов, который может быть проанализирован с помощью вызова <xml:apply-templates>. Включение внешней таблицы стилей можно выполнить с помощью тега <xsl:include>.

<xsl:include href="$external"/>
<xsl:apply-templates select="document($path)"/>

См. Также документацию для document()

0 голосов
/ 15 мая 2010

Я написал xslt, который читает некоторые имена файлов XML и делает некоторые операции на них. Я использую для каждого работать их один за другим. У меня есть каждый путь внутри параметра $ path.

Но теперь я хотел бы вывести результат применения внешнего таблица стилей для этих файлов

Раствор состоит из следующих ингредиентов :

  1. Используйте стандартную функцию XSLT document() для загрузки и доступа к внешнему документу XML.

  2. Импортировать внешнюю таблицу стилей, используя инструкцию <xsl:import>.

  3. Шаблоны во внешней таблице стилей должны находиться в специальном режиме , не используемом основной таблицей стилей.

  4. В том месте, где требуется результат "внешнего преобразования", введите <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-документ находился в своем собственном файле.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...