[XSLT] Gegenereerde document direct weer transformen

Pagina: 1
Acties:

  • r0bert
  • Registratie: September 2001
  • Laatst online: 28-11 00:42
Iemand die ervaring heeft met het direct weer transformeren van de ouput van een XSL-transformatie? Ik wil de output (die dan nog in de buffer staat), graag direct weer bewerken, zonder dit alles tussentijds op te slaan. Is dat mogelijk?

vb (psuedo)
code:
1
2
3
4
5
6
7
8
9
10
<xsl:template>
   <xsl:element name="valid-element">
        <xsl:element name="invalid-element">
             <xsl:element name="valid-element">
             </xsl:element>
        </xsl:element>
   </xsl:element>
</xsl:template>

etc.. meer code met valid-elements e.d.

Het gaat erom dat ik na afloop alle elementen bij langs kan lopen, en bijv. valid-element groen maak, invalid-element rood. Het moet echt na afloop van alles geparsed te hebben, dus een call-template in invalid-element bijvoorbeeld is niet de bedoeling.

Hopelijk heeft iemand een goed idee hoe ik dit op kan lossen, zonder een tussenstap te creeeren om eerst de XML te outputten en vervolgens een nieuwe xslsheet aan te roepen?

  • Niemand_Anders
  • Registratie: Juli 2006
  • Laatst online: 09-07-2024

Niemand_Anders

Dat was ik niet..

Dat ligt aan je definitie van opslaan. Resultaten van een xslt transformatie kun je rechtstreeks wegschrijven naar een XmlDocument. Dat XmlDocument kun je eventueel weer aan een tweede XstlCompiledTransform object meegeven.

Werkt je inmiddels al met .NET 3.0 dan is het nog eenvoudig middels de XDocument (System.Xml.Linq) class. Die heeft standaard al een CreateReader en CreateWriter methode aan boord.

Een andere oplossing is om het resultaat in een MemoryStream te bewaren. Mogelijkheden zat. Ik zou zeggen neems eens een kijkje in de MSDN .NET reference documentatie en dan met name (System.Xml.Xsl.Xsl(Compiled)Transform.

If it isn't broken, fix it until it is..


  • r0bert
  • Registratie: September 2001
  • Laatst online: 28-11 00:42
Op zich ging het om een situatie met alleen XSLT zonder backend programmeerplatform. Maar eventueel kan ik er PHP bij gebruiken en kan ik het daarmee nog een keer transformeren. Ik wil liever inline de output direct transformeren, dus als iemand daar een mogelijkheid voor weet, hoor ik het alsnog graag.

Ik gebruik dus geen .net

  • Gerco
  • Registratie: Mei 2000
  • Laatst online: 30-11 06:38

Gerco

Professional Newbie

Je kan je hele transformatie opslaan in een xsl:variable en daar dan weer templates op aanroepen:
XML:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
<xsl:stylesheet ... etc ...>

  <xsl:variable name="tussenresultaat">
    <xsl:apply-templates select="/" mode="pass1"/>
  </xsl:variable>

  <xsl:template match="iets" mode="pass1">
    ... doe je ding voor pass 1 ...
  </xsl:template>

  <xsl:template match="ietsanders" mode="pass2">
    ... doe je ding voor pass 2 ...
  </xsl:template>

  <xsl:template match="/">
    <xsl:apply-templates select="$tussenresultaat" mode="pass2"/>
  </xsl:template>
</xsl:stylesheet>


Geen idee of dit werkt (of dat je misschien meer of minder met mode= moet spelen), maar ik heb iets soortgelijks al gebruikt om bijvoorbeeld meerdere document()s samen te voegen in 1 variabele en daar dan templates op aan te roepen.

- "Als ik zou willen dat je het begreep, legde ik het wel beter uit!" | All number systems are base 10!


  • r0bert
  • Registratie: September 2001
  • Laatst online: 28-11 00:42
Ziet er veelbelovend uit. Ga het morgen proberen!