[XML] waarden aanpassen dmv formule

Pagina: 1
Acties:
  • 119 views sinds 30-01-2008
  • Reageer

  • DPhoenix
  • Registratie: Februari 2001
  • Laatst online: 09-09 22:47
Mijn probleem is als volgt. Ik heb de volgende waardes in XML:
code:
1
2
3
4
5
6
7
<POSITION>
      <x>0</x>
    <y>0</y>
    <w>341</w>
    <h>61</h>
    <units>Dialog</units>
</POSITION>

Hoe kan ik de waardes tussen de nodes <w> (weight) en <h> (height) aanpassen in XSL, dus bijvoorbeeld 1,5x zo breed en 2x zo hoog.

Kan dit doormiddel van een formule en zo ja, hoe dan?


De XML data in de XML mag niet aangepast worden!

AULXJMHR


  • mbravenboer
  • Registratie: Januari 2000
  • Laatst online: 06-11-2025
DutchPhoenix: Hoe kan ik de waardes tussen de nodes <w> (weight) en <h> (height) aanpassen in XSL, dus bijvoorbeeld 1,5x zo breed en 2x zo hoog.
Tja, dat kan gewoon in een transformatie uiteraard :) .
Kan dit doormiddel van een formule en zo ja, hoe dan?
Je maakt een template voor de w en de h en vermenigvuldigd de getallen met de gewenste waarde :? .
De XML data in de XML mag niet aangepast worden!
Dat is niet nodig, als je dan maar de transformatie erop los kunt laten en daarbij een nieuwe file kunt maken.

Blog, Stratego/XT: Program Transformation, SDF: Syntax Definition, Nix: Software Deployment


  • Orphix
  • Registratie: Februari 2000
  • Niet online
Gewoon een <xsl:value-of select="w*1.5"/> zou moeten werken imo.

  • DPhoenix
  • Registratie: Februari 2001
  • Laatst online: 09-09 22:47
Ik heb het volgende nu in mij XSL staan.
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
<xsl:template match="/">
<html>
  <head>
    <title>
        <xsl:for-each select="DIALOGS/DIALOG">
        <xsl:value-of select="name"/>
      </xsl:for-each>
    </title>
      <SCRIPT LANGUAGE="javascript">
    var width = <xsl:for-each select="DIALOGS/DIALOG/POSITION">
     <xsl:value-of select="w*1.5"/>
    </xsl:for-each>
    var height = <xsl:for-each select="DIALOGS/DIALOG/POSITION">
     <xsl:value-of select="h*2"/> 
    </xsl:for-each>)
    document.write("<BODY onUnload=window.resizeTo("+width+ "," +height+")>")
    </SCRIPT>
  </head>
<body>
</body>
/html>
</xsl:template>

Hij geeft dan de volgende melding:

The XML page cannot be displayed
Cannot view XML input using XSL style sheet. Please correct the error and then click the Refresh button, or try again later.


--------------------------------------------------------------------------------

A string literal was expected, but no opening quote character was found. Error processing resource 'file://E:\Xml\phoenix.xsl'. Line 19, Position 36


document.write("<BODY onUnload=window.resizeTo("+width+ "," +height+")>")
-----------------------------------^

Iemand een idee :?

AULXJMHR


  • mbravenboer
  • Registratie: Januari 2000
  • Laatst online: 06-11-2025
Je moet natuurlijk wel zorgen dat je well-formed XML schrijft. Je hebt hier een <body> opgenomen. Dat kan op zich best, maar dat moet die wel aan de xml syntax voldoen.

Waarschijnlijk kan je die .write beter even in een CDATA section stoppen of de bijzondere XML tekens escapen.

Blog, Stratego/XT: Program Transformation, SDF: Syntax Definition, Nix: Software Deployment


  • DPhoenix
  • Registratie: Februari 2001
  • Laatst online: 09-09 22:47
Op woensdag 13 februari 2002 15:09 schreef mbravenboer het volgende:
Je moet natuurlijk wel zorgen dat je well-formed XML schrijft. Je hebt hier een
code:
1
<body>

opgenomen. Dat kan op zich best, maar dat moet die wel aan de xml syntax voldoen.

Waarschijnlijk kan je die .write beter even in een CDATA section stoppen of de bijzondere XML tekens escapen.
Welk gedeelte van de body voldoet dan niet aan de syntax? Ik geloof graag dat die .write beter in een CDATA section moet maar een DTD mag ik niet gebruiken (kan dit ook in de XSL?)

Bijzondere XML tekens escapen, hoe bedoel je?

AULXJMHR


  • Orphix
  • Registratie: Februari 2000
  • Niet online
Zoiets als dit krijg je dan:
code:
1
2
3
  <![CDATA[
    document.write("<BODY onUnload=window.resizeTo("+width+ "," +height+")>")
  ]]>

De tekst wordt dan niet meegenomen door de parser.
de afsluitende html tag klopt ook niet

  • DPhoenix
  • Registratie: Februari 2001
  • Laatst online: 09-09 22:47
Op woensdag 13 februari 2002 15:38 schreef Orphix het volgende:
Zoiets als dit krijg je dan:
code:
1
2
3
  <![CDATA[
    document.write("<BODY onUnload=window.resizeTo("+width+ "," +height+")>")
  ]]>

De tekst wordt dan niet meegenomen door de parser.
de afsluitende html tag klopt ook niet
Bedankt voor de tip! afsluitende html tag heb je gelijk in. verkeerd gegaan met C/P |:(

AULXJMHR


  • DPhoenix
  • Registratie: Februari 2001
  • Laatst online: 09-09 22:47
Het javascript in de XSL werkt nog niet goed. De code is als volgt:
code:
1
2
3
4
5
6
7
8
9
10
SCRIPT LANGUAGE="javascript">
    var width = <xsl:for-each select="DIALOGS/DIALOG/POSITION">
     <xsl:value-of select="w*1.5"/>
    </xsl:for-each>
    var height = <xsl:for-each select="DIALOGS/DIALOG/POSITION">
     <xsl:value-of select="h*2"/> 
    </xsl:for-each>)
    <![CDATA[document.write("<BODY onUnload=window.resizeTo
      ("+width+ "," +height+")>")]]>
</SCRIPT>

De factoren 1.5 en 2 bij respectievelijk w en h moeten volgens mij niet als hierboven worden weergegeven. Doe ik dit wel dan geef thij een fout bij een <i>node</i> uit de XML die ik nog helemaal niet aanroep |:(

Toen heb ik de factoren weggehaald om het zonder te proberen dus gewoon:
code:
1
<xsl:value-of select="w"/>

ipv:
code:
1
<xsl:value-of select="w*1.5"/>

Wanneer ik het zonder de factoren doe, dan krijg ik de volgende script syntax error bij Line 9 Char 1. Deze positie staat buiten het script in de XSL!

AULXJMHR


  • mbravenboer
  • Registratie: Januari 2000
  • Laatst online: 06-11-2025
Is die assigment aan de var width (en height) met een for-each niet een beetje erg raar :?

Blog, Stratego/XT: Program Transformation, SDF: Syntax Definition, Nix: Software Deployment


  • DPhoenix
  • Registratie: Februari 2001
  • Laatst online: 09-09 22:47
Op donderdag 14 februari 2002 16:10 schreef mbravenboer het volgende:
Is die assigment aan de var width (en height) met een for-each niet een beetje erg raar :?
Je moet toch zeggen uit welke node de width en height komen? Hoe zou jij dat dan doen?

AULXJMHR


  • mbravenboer
  • Registratie: Januari 2000
  • Laatst online: 06-11-2025
DutchPhoenix: Je moet toch zeggen uit welke node de width en height komen? Hoe zou jij dat dan doen?
Deze for-each levert gewoon een lijstje van resultaten op... dat kan je vast niet aan een variabele toewijzen ;) .

Ik denk dat je het misschien op wilt tellen of iets dergelijks?

Gebruik anders eens een command-line XSLT engine. Je kunt het resultaat van de transformatie dan zien en je had dan waarschijnlijk gelijk gezien wat er mis is...

Blog, Stratego/XT: Program Transformation, SDF: Syntax Definition, Nix: Software Deployment


  • DPhoenix
  • Registratie: Februari 2001
  • Laatst online: 09-09 22:47
Ik zal je even precies uitleggen wat ik wil. Inderdaad ik wil iets uitreken. Namelijk de waarde van de width en height die in de XML staan verdubbelen met, laten we zeggen, beide x2.

Deze waarden geven de grootte van het schermpje aan in de browser. De applicatie draait al offline maar moet ook online worden gebruikt echter de waarden in XML komen (als je ze niet met een berekening vergroot) er te klein uit.

De XSL is als volgt:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
<?xml version="1.0"?>
<xsl:stylesheet  xmlns:xsl="http://www.w3.org/TR/WD-xsl">
    
    <xsl:template match="/">
        <html>
            <head>
                <title><xsl:for-each select="DIALOGS/DIALOG">
                        <xsl:value-of select="name"/>
                       </xsl:for-each></title>
                <SCRIPT LANGUAGE="javascript">
                var width =  <xsl:value-of select="w*2"/>
                var height = <xsl:value-of select="h*2"/> 
                <![CDATA[document.write("<BODY onUnload=window.resizeTo("+width+ "," +height+")>")]]>       
                </SCRIPT>
            </head>
            <body>
        
            </body>
        </html>
    </xsl:template>
</xsl:stylesheet>

Wanner ik de XML dan uitvoer dan komt het volgende eruit:
code:
1
2
3
4
5
6
7
8
9
10
11
The XML page cannot be displayed 
Cannot view XML input using XSL style sheet. Please correct the error and then click the Refresh button, or try again later. 


--------------------------------------------------------------------------------

Unspecified error Line 160, Position 13 
 

     <style>Visible</style>
------------^

Hopelijk is het iets duidelijker zo. Command-line XSLT Engine? Nooit van gehoord hoe werkt dat :?

AULXJMHR


  • mbravenboer
  • Registratie: Januari 2000
  • Laatst online: 06-11-2025
Als je een command-line engine gebruikt voer je je transformatie gewoon uit op de command-line. Hierdoor kan je perfect zien wat er uit je transformatie komt en dit is ook veruit de beste manier om te debuggen :) . Ik kan nu wel weer een voorbeeld gaan geven, maar ik denk dat je er meer van leert als je even zelf wat prutst...

Blog, Stratego/XT: Program Transformation, SDF: Syntax Definition, Nix: Software Deployment


  • DPhoenix
  • Registratie: Februari 2001
  • Laatst online: 09-09 22:47
MBravenboer,

Ik heb gezocht naar een Command-line XSLT-engine niet echt vinden. Althans ik zag wat bij xml.apache.org maar ik weet niet welke ik moet hebben.

AULXJMHR


  • mbravenboer
  • Registratie: Januari 2000
  • Laatst online: 06-11-2025
DutchPhoenix: Ik heb gezocht naar een Command-line XSLT-engine niet echt vinden. Althans ik zag wat bij xml.apache.org maar ik weet niet welke ik moet hebben.
Die laatste (Xalan) kan je inderdaad gebruiken (doe ik ook). Het werkt het makkelijkst als je even de laatste Java installeert (1.4.0: http://java.sun.com/j2se/1.4 ). In deze Java zitten standaard XSLT libraries met als implementatie Xalan. Als je hem gedownload hebt kan ik je even een tooltje geven waarmee je hem gemakkelijk kunt gebruikt.

Overigens kan je ook XT gebruiken:
Site: http://www.jclark.com/xml/xt.html
Download: ftp://ftp.jclark.com/pub/xml/xt-win32.zip
Hiervoor heb je geen nieuwe Java nodig en het is een simpele executable.

Blog, Stratego/XT: Program Transformation, SDF: Syntax Definition, Nix: Software Deployment


  • DPhoenix
  • Registratie: Februari 2001
  • Laatst online: 09-09 22:47
Op vrijdag 15 februari 2002 09:47 schreef mbravenboer het volgende:

[..]

Die laatste (Xalan) kan je inderdaad gebruiken (doe ik ook). Het werkt het makkelijkst als je even de laatste Java installeert (1.4.0: http://java.sun.com/j2se/1.4 ). In deze Java zitten standaard XSLT libraries met als implementatie Xalan. Als je hem gedownload hebt kan ik je even een tooltje geven waarmee je hem gemakkelijk kunt gebruikt.
Deze heb ik nu gedownload.
Overigens kan je ook XT gebruiken:
Site: http://www.jclark.com/xml/xt.html
Download: ftp://ftp.jclark.com/pub/xml/xt-win32.zip
Hiervoor heb je geen nieuwe Java nodig en het is een simpele executable.
Deze heb ik ook gedownload maar het uitvoeren gaat een beetje lastig. Ik begrijp dat je dit in de dos commandline moet doen, maar mijn toetsenbord doet vaag met de toetsen in dos. Dus vandaar dat het handiger zou zijn als je me dat tooltje nog even wilt geven....

AULXJMHR


  • mbravenboer
  • Registratie: Januari 2000
  • Laatst online: 06-11-2025
DutchPhoenix: Deze heb ik ook gedownload maar het uitvoeren gaat een beetje lastig.
Hum, het anbdere tooltje werkt ook alleen vanaf de command-line, dus helaas schiet dat niet zo op dan :) .

Ik zou eerst maar proberen m'n toetsenbord te fixen ;) .

Blog, Stratego/XT: Program Transformation, SDF: Syntax Definition, Nix: Software Deployment


  • DPhoenix
  • Registratie: Februari 2001
  • Laatst online: 09-09 22:47
eheh ;) Ik heb het we eens eerder gehad. Dan druk je in dos op de / en dan geeft hij heel wat anders weer. Ik heb al bij keyboard instellingen gekeken maar daar staat alles goed.

Language: Dutch Lay-out: United-States International

Daar stond hij op. Goed toch? Vaag.....

AULXJMHR


  • mbravenboer
  • Registratie: Januari 2000
  • Laatst online: 06-11-2025
DutchPhoenix: Language: Dutch Lay-out: United-States International
Das meer iets voor een ander forum denk ik ;) . Het lijkt mij dat dit goe staat als het in andere apps wel goed werkt...

Je kan anders ook een batch-file schrijven die xt aanroept en deze gewoon dubbelklikken vanuit explorer :) .

Blog, Stratego/XT: Program Transformation, SDF: Syntax Definition, Nix: Software Deployment


  • DPhoenix
  • Registratie: Februari 2001
  • Laatst online: 09-09 22:47
Op vrijdag 15 februari 2002 11:48 schreef mbravenboer het volgende:

[..]

Das meer iets voor een ander forum denk ik ;) . Het lijkt mij dat dit goe staat als het in andere apps wel goed werkt...
Dat weet ik ;) Het toetsenbord werkt wel goed in andere applicaties alleen niet in DOS. Kijk maar naar mijn posts in dit forum ;)
Je kan anders ook een batch-file schrijven die xt aanroept en deze gewoon dubbelklikken vanuit explorer :) .
* DPhoenix heeft nog nooit een batch-file geschreven. Ik zoek wel even in het forum hoe je dat doet.

AULXJMHR


  • DPhoenix
  • Registratie: Februari 2001
  • Laatst online: 09-09 22:47
Erm, heb een poging gedaan om die batchfile te schrijven:
code:
1
2
3
@echo off
cls
xt e:\xml\phoenix.xsl

Er gebeurt nix. Krijg gewoon hetzelfde te zien als wanneer ik gewoon XT in de command-line type. |:(

AULXJMHR


  • mbravenboer
  • Registratie: Januari 2000
  • Laatst online: 06-11-2025
DutchPhoenix: Erm, heb een poging gedaan om die batchfile te schrijven
Ik denk dat je nog iets meer mee moet geven (XML file, output locatie etc). Kijk eens op de XT website, daar staat het allemaal op...

Blog, Stratego/XT: Program Transformation, SDF: Syntax Definition, Nix: Software Deployment


  • DPhoenix
  • Registratie: Februari 2001
  • Laatst online: 09-09 22:47
Ik heb het gevonden en voer het uit volgens de Xfont tutorial, hoe XT werkt bedoel ik.

Ik voer het als volgt uit:

c:\xt Epdgb.xml phoenix.xsl Epdgb.html

Op zich goed lijkt me. Echter ik krijg de volgende foutmelding:

file:/c:/xt phoenix.xsl:15: character not allowed.

Wat gaat er hier fout? :?

AULXJMHR

Pagina: 1