Используйте XSL для генерации динамического XSL, который выполняется в рамках того же сценария?

Когда вы используете пользовательскую директиву / pipe в совместно используемом модуле, вам также необходимо экспортировать ее.

По сути, в вашем уроке он создал директиву и объявил ее в модуле приложения. Но в вашем примере вы помещаете свою директиву в общий модуль, поэтому вам нужно поместить свою директиву в скобки объявлений, а также в экспорт.

shared.module.ts :

@NgModule({
    /* ... */
    declarations: [YourDirective],
    exports: [YourDirective]
    /* ... */
})
5
задан Deduplicator 9 May 2015 в 22:39
поделиться

2 ответа

То, что Вы хотите, не возможно в настоящее время в чистом XSLT (1.0 или 2.0).

Если Вы - useing сакс 9.x процессор XSLT, существует несколько дополнительных функций, которые реализуют это: saxon:compile-таблица-стилей () и saxon:transform ().

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

1
ответ дан 18 December 2019 в 12:02
поделиться

XSLT имеет специальную встроенную функцию, которая поддерживает генерирующийся вывод, который является самим XSLT.

Это <xsl:namespace-alias> Директива XSLT.

Как объяснено спецификацией XSLT 1.0.:

"

<!-- Category: top-level-element -->
<xsl:namespace-alias
  stylesheet-prefix = prefix | "#default"
  result-prefix = prefix | "#default" />

Таблица стилей может использовать xsl:namespace-alias элемент, чтобы объявить, что одно пространство имен URI является псевдонимом для другого пространства имен URI. Когда литеральное пространство имен, URI, как объявляли, был псевдонимом для другого пространства имен URI, затем пространство имен URI в дереве результата, будет пространством имен URI, что литеральное пространство имен URI является псевдонимом для вместо литерального пространства имен сам URI. xsl:namespace-alias элемент объявляет, что пространство имен URI связало с префиксом, указанным stylesheet-prefix атрибут является псевдонимом для пространства имен URI, связанный с префиксом, указанным result-prefix атрибут. Таким образом, stylesheet-prefix атрибут указывает пространство имен URI, который появится в таблице стилей, и result-prefix атрибут указывает соответствующее пространство имен URI, который появится в дереве результата".

Вот небольшой пример преобразования, которое генерирует xsl:stylesheet содержа xsl:variable, который создается требуемым способом:

<xsl:stylesheet version="1.0"
 xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
 xmlns:xxx="my:dummyNS" exclude-result-prefixes="xxx"
 >
 <xsl:output omit-xml-declaration="yes" indent="yes"/>

 <xsl:namespace-alias result-prefix="xsl" stylesheet-prefix="xxx"/>

 <xsl:template match="/*">
  <xxx:stylesheet version="1.0"
  xmlns:xsl="http://www.w3.org/1999/XSL/Transform">

  <xxx:variable name="{@name}">
    <xsl:value-of select="."/>
  </xxx:variable>
 </xxx:stylesheet>
 </xsl:template>
</xsl:stylesheet>

Когда это преобразование применяется на следующий XML-документ:

    <v name="myVarName">myValue</v>

к требуемому результату приводят:

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
    <xsl:variable name="myVarName">myValue</xsl:variable>
</xsl:stylesheet>

Затем следующий шаг должен будет запуститься в Вашем "сценарии", это динамично генерировало преобразование XSLT.

14
ответ дан 18 December 2019 в 12:02
поделиться
Другие вопросы по тегам:

Похожие вопросы: