xslt, zřetězení transformací v jednom souboru rubrika: Programování: Jiné

2 Andreaw Fean
položil/-a 4.1.2020

Mám ošklivé xmlko.
Nejdříve jej pomocí xslt přeupravím a udělám hezčí.
Pak druhým xslt naformátuju požadovaný výsledek.

Zkoušel jsem to dělat rovnou, ale ten výsledný xslt byl strašně zašmodrchanej, zatímco takto dvouprůchodně to vypadá mnohem lépe.

Jenže teď mám problém, že se ten Xalan musí volat dvakrát:

Xalan src.xml normalize.xslt > out1.xml
Xalan out1.xml build.xslt > produkt.xml

Je nějaká možnost, jak to zřetězit tak, aby to volání bylo jen jednou, a to dvojí zpracování bylo nějak "uvnitř" toho xslt? Že si tu normalizující šablonu nějak natáhne a aplikuje sám?

Děkuji.

odkaz
2 igieon
odpověděl/-a 10.1.2020

Teraz nerozumiem co chces dosiahnut 1 command v riadku tak to potom napr.:

 Xalan src.xml normalize.xslt | Xalan -o produkt.xml - build.xslt

Ak chces nieco komplexnejsie tu je to pekne popisane
http://www.gerixsoft.com/blog/xslt/pipeline

A ak pouzivas Xalan z balicka musis pouzit http://xalan.apache.org/xalan-c/extensionslib.html#nodeset. Takze xslt bude asi takto nejak
Pricom upravis kazdy xslt aby malo vlastny mode pri template.

<?xml version="1.0" encoding="utf-8"?>
 
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:xalan="http://xml.apache.org/xalan"
                   exclude-result-prefixes="xalan">
 
    <xsl:output method="xml" omit-xml-declaration="no" indent="no" encoding="UTF-8"/>
 
    <xsl:import href="normalize.xslt"/>
    <xsl:import href="build.xslt"/>
 
    <xsl:template match="/">
        <xsl:variable name="link1">
            <xsl:apply-templates mode="normalize" select="node()"/>
        </xsl:variable>
        <xsl:variable name="link2">
            <xsl:apply-templates mode="build" select="xalan:nodeset($link1)/node()"/>
        </xsl:variable>
 
        <xsl:copy-of select="xalan:nodeset($link2)/node()"/>
    </xsl:template>
 
</xsl:stylesheet>

Komentáře

  • Andreaw Fean : Děkuji za komentář k věci. Použití pipe se chci vyhnout, protože jde o to, abych to nekomplikoval zákazníkovi. Ten druhý způsob je zhruba něco co chci, ale zase aby to nebylo vázáno na Xalan. Já používám Xalan, ale klient to spouští na msxml. A musí to tak být. 10.1.2020
  • igieon : V tom blogu je popisane co treba nastavit pre msxml. 11.1.2020

Pro zobrazení všech 2 odpovědí se prosím přihlaste:

Rychlé přihlášení přes sociální sítě:

Nebo se přihlaste jménem a heslem:

Zadejte prosím svou e-mailovou adresu.
Zadejte své heslo.