Ik probeer een door de gebruiker gedefinieerde functie in XSLT te gebruiken die herhaaldelijk de waarde van een bepaalde reeks aanroept. Die reeks is gebaseerd op de uitkomst van een XPath-uitdrukking die niet verandert binnen de tijdsspanne van één enkele functieaanroep. Ik dacht dat het een goed idee zou zijn om het aan een variabele toe te wijzen in plaats van het steeds opnieuw op te zoeken.
Helaas, in ieder geval in de implementatie van Saxon, kun je geen XPath-expressie gebruiken die een knoop in een functie vereist, zelfs een op basis van een absoluut pad, zonder eerst een weggooiverbinding te gebruiken om de functie te laten weten dat je het rootdocument bespreekt in plaats van een andere.
Dus de volgende code gooit bijvoorbeeld een foutmelding:
Normaal gesproken is de oplossing alleen maar om elke globale variabele eerst context te geven. Bijvoorbeeld, de volgende werken binnen een udf ($ root is een variabele geïdentificeerd met het root-knooppunt):
Maar dit werkt niet wanneer ik Xpath probeer te gebruiken om de waarde van een variabele te bepalen, omdat ik de expressie niet binnen een for-each mag plaatsen.
Ik heb ook geprobeerd om te gebruiken
to give it context, going on what I saw here:http://www.stylusstudio.com/xsllist/200504/post00240.html
Dat werkte ook niet.
FWIW, het doorgeven van de variabele aan de functie is problematisch omdat de Xpath-expressie die wordt gebruikt om "myleaf" te definiëren, afhankelijk is van het contextknooppunt, en ik niet weet hoe Xpath een pad moet krijgen op basis van waarden in het huidige contextknooppunt.
In de code die deze functie aanroept, bijvoorbeeld, heb ik iets als:
Ik werk in de context van een/potato/stem [eye] -knoop en gebruik de udf om naar een/potato/stem [scc] -knooppunt te zoeken met dezelfde waarde als @sessionID. Ik weet niet hoe ik moet verwijzen naar de waarde van @sessionID van het huidige contextknooppunt in het predikaat van een XPath die zoekt naar andere knooppunten in een heel ander deel van de XML-structuur, dus ik gebruikte hiervoor een udf. Het werkte prima totdat ik besloot om een variabele voor de string te gebruiken in plaats van dat de processor het elke keer opzoekde.
Ik probeerde te voorkomen dat ik een niveau dieper ging (mijn functie zelf noemde een benoemde sjabloon of een benoemde sjabloon in mijn originele for-each zetten en die benoemde template een functie noemen).
Dus mijn vragen zijn:
A. Hoe stel ik voor een door de gebruiker gedefinieerde functie een variabele in die afhangt van een XPath-uitdrukking?
B. Is er een snazzy manier in Xpath om waarden te gebruiken die zijn getrokken uit het huidige inhoudknooppunt in de predikaten van de Xpath-expressie die u probeert te testen?