[Xalan/Java/XSL] Geen waarde uit XML in javascript

Pagina: 1
Acties:

  • salgera
  • Registratie: Mei 2002
  • Laatst online: 23-09-2021
Ik ben bezig met javascripts die serverside draaien op Xalan. Door een XML met een XSL samen te voegen en wat serverside javascripting wil ik HTML creeeren. Dit werkt tot op bepaalde hoogte, namelijk:
Wanneer ik een waarde van een XML-tag doorgeef middels een variabele van XSL naar de serverside javascript, dan heeft de variabele in javascript altijd een volgende waarde:
"..java.util.een.heleboel.23DF12C" (ik weet het niet precies uit mijn hoofd).

Dit is volgens mij gewoon een string met deze waarde. Ik kan deze string namelijk ook aanpassen en teruggeven. Het is dus niet de achterliggende waarde van de XML-tag die ik middels een variabele heb doorgegeven. En die XML-waarde heb ik natuurlijk nodig.

Weet iemand een oplossing voor dit probleem? Ik weet dat het waarschijnlijk niet al te duidelijk is, maar ik weet het nu niet duidelijker aan te geven. Vraag gerust...
(Ik moet trouwens met deze situatie werken. Ik heb dus geen hulp aan andere tools of programmeertalen).

  • crisp
  • Registratie: Februari 2000
  • Nu online

crisp

Devver

Pixelated

Niet geheel offtopic: Xalan is Java en geen Javascript, ik zal iig je titel dus even aanpassen ;)

Intentionally left blank


  • salgera
  • Registratie: Mei 2002
  • Laatst online: 23-09-2021
crisp schreef op dinsdag 17 april 2007 @ 21:37:
Niet geheel offtopic: Xalan is Java en geen Javascript, ik zal iig je titel dus even aanpassen ;)
Nee, het moet juist wél javascript zijn!

  • Creepy
  • Registratie: Juni 2001
  • Laatst online: 30-11 15:10

Creepy

Tactical Espionage Splatterer

java.util.een.heleboel duidt wel degelijk op Java en niet op Javascript.

En het lijkt erop alsof je direct een .toString o.i.d. aanroept op een object dat dat niet zelf ondersteunt maar zo zonder relevante code kan ik er verder alleen maar gokken.

"I had a problem, I solved it with regular expressions. Now I have two problems". That's shows a lack of appreciation for regular expressions: "I know have _star_ problems" --Kevlin Henney


  • salgera
  • Registratie: Mei 2002
  • Laatst online: 23-09-2021
Het is een probleem dat ik op het werk heb, en ik weet niet zo 1-2-3 wat ie terug geeft. Ik heb ondertussen het volgende gevonden op het internet:

The function below shows how JavaScript regular expression support is used to calculate the output surname element using the input name element:

function calculate_surname( name )
{
return name.split( /s/g )[1];
}

The XSLT function call is:

<xsl:value-of select="javascript:calculate_surname( string(name) )"/>

Note that the name element is coerced into a string type before it is passed to the function. This will ensure that a string type rather than a node type is passed to the function.


bron: http://www.devarticles.com/c/a/XML/Using-Script-Extensions-in-Xalan-Java/3/

  • eghie
  • Registratie: Februari 2002
  • Niet online

eghie

Spoken words!

Creepy schreef op dinsdag 17 april 2007 @ 22:53:
java.util.een.heleboel duidt wel degelijk op Java en niet op Javascript.

En het lijkt erop alsof je direct een .toString o.i.d. aanroept op een object dat dat niet zelf ondersteunt maar zo zonder relevante code kan ik er verder alleen maar gokken.
Dit lijkt inderdaad op JAVA. Bij java is het zo dat standaard alle objecten overerven van het object Object. Deze object heeft een methode, genaamd toString(). Deze geeft standaard de volgende waarde terug: package.classname@memoryaddress

Je pakt dus de verkeerde methodes om de boel uit te lezen. Waarschijnlijk iets met .get()'s.

Laat eens wat relevante code zien.

  • Sendy
  • Registratie: September 2001
  • Niet online
Het gaat hier echt om javascript, niet java. In Xalan kan je (volgens de links van de TS van 23:03) javascript imbedden. De java die je ziet is een melding van Xalan (dat in java geschreven is).

De TS had dit trouwens wel even mogen zeggen want het is een niet-alledaagse opzet.

  • ari3
  • Registratie: Augustus 2002
  • Niet online
Ja, de TS gebruikt een feature waarmee je de standaard XPath functieset kan uitbreiden met eigen functies. In dit geval een JavaScript-achtig implementatie, zie de XPathFunctionResolver interface. TS zou dus kijken naar de implementatie van de calculate_surname XPath functie.

"Kill one man, and you are a murderer. Kill millions of men, and you are a conqueror. Kill them all, and you are a god." -- Jean Rostand


  • salgera
  • Registratie: Mei 2002
  • Laatst online: 23-09-2021
Allemaal bedankt!
Het ziet er naar uit dat ik in XSLT function call 'string()' moet gebruiken, anders komt de juiste waarde niet in javascript terecht.
Het grappige is dat dit 'probleem' is opgelost in de laatste versies van Xalan / BSF / js.jar.

Volgens mij is het opgelost in Xalan XSLT omdat deze de waarde doorgeeft aan javacscript. Klopt mijn gedachtegang?

  • salgera
  • Registratie: Mei 2002
  • Laatst online: 23-09-2021
eghie schreef op dinsdag 17 april 2007 @ 23:21:
[...]

Dit lijkt inderdaad op JAVA. Bij java is het zo dat standaard alle objecten overerven van het object Object. Deze object heeft een methode, genaamd toString(). Deze geeft standaard de volgende waarde terug: package.classname@memoryaddress

Je pakt dus de verkeerde methodes om de boel uit te lezen. Waarschijnlijk iets met .get()'s.

Laat eens wat relevante code zien.
Wat relevante code:

In de XSL:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
<xalan:component prefix="salgera" functions="DatumIndienen">
    <xalan:script lang="javascript">
<![CDATA[

    function DatumIndienen(arg) {
    var datind = String(arg);
    return datind;
    }

]]></xalan:script></xalan:component>

<xsl:template name="indienen">
    <xsl:variable name="indienen">
    <xsl:value-of select="datumindienen"/>
    </xsl:variable>
    <xsl:value-of select="andreas:DatumIndienen([b]string[/b]($indienen))"/>
</xsl:template>


In de laatste versie van Xalan, bsf.jar en js.jar hoef je de string() niet te gebruiken. In de oudere versie (die ik op het werk heb en niet 1-2-3 kan upgraden) werkt dit zonder string() niet.

[ Voor 0% gewijzigd door salgera op 18-04-2007 10:23 . Reden: [code] toegevoegd ]


  • salgera
  • Registratie: Mei 2002
  • Laatst online: 23-09-2021
Ik heb het getest en het werkt allemaal met die oplossing die ik hierboven gevonden heb. Ik loop nog wel tegen een klein probleempje op namelijk: wanneer ik vanuit de Javascript een html-tag wil meegeven (bijvoorbeeld: '<tr>'), dan wordt deze standaard door XSLT omgebouwd tot '<tr>'.
En hierdoor is mijn output-html-bestand natuurlijk niet leesbaar.

Dit valt niet op te lossen door '<tr>' of '&60;tr&62;' mee te geven. Ik heb het nu opgelost door het met XSL op te lossen (via <xsl:text ......><tr </xsl:text> , maar ik zou ook graag de vrijheid hebben om tags vanuit javascript te kunnen genereren.
Pagina: 1