Avatar billede priestie Nybegynder
06. juli 2004 - 23:09 Der er 2 kommentarer og
1 løsning

For mange iterationer i #foreach statement i DVSL template

Jeg har lavet et lille eksempel i Velocity hvor jeg bruger DVSL, men mit output er ikke helt godt.

Denne XML fil:
************************************
<?xml version="1.0"?>
<monkeylist>
  <monkey>MONKEY_VALUE
    <firstname>Monkey</firstname>
    <lastname>Man</lastname>
    <city>monkeytown</city>
    <phone>12314567</phone>
    <email>monkey@monkeysorld.dk</email>
    <password>password</password>
    <comes>Friday</comes>
    <leaves>Sunday</leaves>
    <have_payed>no</have_payed>
  </monkey>
</monkeylist>
**********************************

bliver merged med denne DVSL template:
***************************************
#match("monkey")
<html>
  <body> 
  #foreach ( $field in $node.children() )
    <br>
    $velocityCount
    $field.name()
    $field.value()
  #end
  </body>
</html>
#end
************************************

hvilket foregår i en servlet med denne kodestump:
***********************************************
PrintWriter out = resp.getWriter();
DVSL dvsl = new DVSL();
Reader in = new InputStreamReader(System.in);   
dvsl.setStylesheet("e:/xdocs/example1.dvsl");
in = new FileReader("e:/xdocs/example1.xml");
dvsl.transform(in, out);
out.flush();
*****************************************

HTML outputtet bliver følgende:
***********************************************
<BODY><BR>1 $field.name() MONKEY_VALUE <BR>2 $field.name() <BR>3 $field.name()
<BR>4 firstname Monkey <BR>5 $field.name() <BR>6 $field.name() <BR>7 lastname
Man <BR>8 $field.name() <BR>9 $field.name() <BR>10 city monkeytown <BR>11
$field.name() <BR>12 $field.name() <BR>13 phone 12314567 <BR>14 $field.name()
<BR>15 $field.name() <BR>16 email monkey@monkeysorld.dk <BR>17 $field.name()
<BR>18 $field.name() <BR>19 password password <BR>20 $field.name() <BR>21
$field.name() <BR>22 comes Friday <BR>23 $field.name() <BR>24 $field.name()
<BR>25 leaves Sunday <BR>26 $field.name() <BR>27 $field.name() <BR>28 have_payed
no <BR>29 $field.name() <BR>30 $field.name() </BODY></HTML>
***********************************************

Som det ses kører iterationen for mange gange.

Hvis jeg fjerner "prettyt print" fra XML filen, så det hele står på én linie, bliver outputtet følgende:
************************************************
<BODY><BR>1 $field.name() MONKEY_VALUE <BR>2 firstname Monkey <BR>3 lastname Man
<BR>4 city monkeytown <BR>5 phone 12314567 <BR>6 email monkey@monkeysorld.dk
<BR>7 password password <BR>8 comes Friday <BR>9 leaves Sunday <BR>10 have_payed
no </BODY></HTML>
*************************************************

Det lugter altså lidt af at XML filen ikke bliver rigtigt indlæst, men jeg kan ikke gennemskue hvor den er gal. En anden ting der underbygger dette er at, hvis dette lille eksempel bliver kørt vha. en Ant task, som i eksemplet der medfølger DVSL distributionen, bliver HTML outputtet også i orden, selvom XML filen er "prety printed".

En anden ting jeg heller ikke kan gennemskue er, at indholdet af elementet "monkey" ("MONKEY_VALUE") kommer med i outputtet, når der itereres over "monkey" elementets subtree.

Nogen forslag...?
Avatar billede priestie Nybegynder
07. juli 2004 - 08:11 #1
Jeg har arbejdet videre med min teori, og ganske rigtigt, så er det indlæsningen den er gal med. Ved at rette i sourcen til DVSL distributionen er jeg kommet ud over problemet med alt for mange iterationer, selvom det ikke burde være nødvendigt, da det kører fint nok når jeg bruge Ant Task. Men jeg har stadig problemet med at "MONKEY_VALUE" bliver betragtet som et child af DVSL processen. Det er muligvis en bug, men i så fald er det en slem én!
Avatar billede priestie Nybegynder
05. oktober 2004 - 15:50 #2
lukker lige spm.
Avatar billede priestie Nybegynder
05. oktober 2004 - 15:50 #3
acc
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester