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...?