Artifact 35a5408426b098bcc07bdecfb52f1ec4c8ac3e984224ba497e700420047621a4:

  • File tests/xslt.test — part of check-in [d22f55f9a3] at 2019-07-11 02:02:31 on branch trunk — Fixed possible seg fault with malicious input. (user: rolf size: 45440) [more...]

0000: 23 20 46 65 61 74 75 72 65 73 20 63 6f 76 65 72  # Features cover
0010: 65 64 3a 20 58 53 4c 54 20 74 72 61 6e 73 66 6f  ed: XSLT transfo
0020: 72 6d 61 74 69 6f 6e 0a 23 0a 23 20 54 68 69 73  rmation.#.# This
0030: 20 66 69 6c 65 20 63 6f 6e 74 61 69 6e 73 20 61   file contains a
0040: 20 63 6f 6c 6c 65 63 74 69 6f 6e 20 6f 66 20 74   collection of t
0050: 65 73 74 73 20 66 6f 72 20 74 68 65 20 58 53 4c  ests for the XSL
0060: 54 20 65 6e 67 69 6e 65 20 6f 66 0a 23 20 74 44  T engine of.# tD
0070: 4f 4d 2e 20 49 74 20 69 73 20 66 6f 63 75 73 65  OM. It is focuse
0080: 64 20 6d 61 69 6e 6c 79 20 6f 6e 20 74 68 65 20  d mainly on the 
0090: 74 63 6c 20 69 6e 74 65 72 66 61 63 65 20 6f 66  tcl interface of
00a0: 20 74 68 65 20 65 6e 67 69 6e 65 20 61 6e 64 20   the engine and 
00b0: 6f 6e 0a 23 20 76 65 72 69 66 69 63 61 74 69 6f  on.# verificatio
00c0: 6e 2c 20 74 68 61 74 20 74 68 65 20 63 72 65 61  n, that the crea
00d0: 74 65 64 20 72 65 73 75 6c 74 20 74 72 65 65 20  ted result tree 
00e0: 62 65 68 61 76 65 73 20 61 73 20 69 66 20 69 74  behaves as if it
00f0: 20 77 6f 75 6c 64 0a 23 20 68 61 76 65 20 62 65   would.# have be
0100: 65 6e 20 70 61 72 73 65 64 20 66 72 6f 6d 20 61  en parsed from a
0110: 6e 20 61 63 63 6f 72 64 69 6e 67 20 58 4d 4c 20  n according XML 
0120: 73 6f 75 72 63 65 3b 20 74 68 65 20 76 61 73 74  source; the vast
0130: 65 20 6d 61 6a 6f 72 69 74 79 20 6f 66 0a 23 20  e majority of.# 
0140: 78 73 6c 74 20 63 6f 6d 70 6c 69 61 6e 63 65 20  xslt compliance 
0150: 74 65 73 74 73 20 61 72 65 20 64 6f 6e 65 20 6f  tests are done o
0160: 75 74 73 69 64 65 20 74 68 65 20 74 63 6c 74 65  utside the tclte
0170: 73 74 20 66 72 61 6d 65 77 6f 72 6b 2e 0a 23 0a  st framework..#.
0180: 23 20 54 65 73 74 65 64 20 63 6f 6d 6d 61 6e 64  # Tested command
0190: 73 20 61 6e 64 20 6f 62 6a 65 63 74 20 63 6f 6d  s and object com
01a0: 6d 61 6e 64 73 3a 0a 23 20 20 20 20 78 73 6c 74  mands:.#    xslt
01b0: 2d 31 2e 2a 3a 20 78 70 61 74 68 20 4c 65 78 65  -1.*: xpath Lexe
01c0: 72 2f 70 61 72 73 65 72 20 74 65 73 74 73 0a 23  r/parser tests.#
01d0: 20 20 20 20 78 73 6c 74 2d 32 2e 2a 3a 20 78 73      xslt-2.*: xs
01e0: 6c 74 20 6d 65 74 68 6f 64 20 63 6f 6d 6d 61 6e  lt method comman
01f0: 64 20 76 61 72 69 61 6e 74 73 2c 20 2d 70 61 72  d variants, -par
0200: 61 6d 65 74 65 72 73 20 6f 70 74 69 6f 6e 0a 23  ameters option.#
0210: 20 20 20 20 78 73 6c 74 2d 33 2e 2a 3a 20 78 73      xslt-3.*: xs
0220: 6c 74 20 76 61 72 73 2c 20 73 63 6f 70 65 2c 20  lt vars, scope, 
0230: 70 61 72 61 6d 65 74 65 72 73 0a 23 20 20 20 20  parameters.#    
0240: 78 73 6c 74 2d 34 2e 2a 3a 20 78 73 6c 74 20 74  xslt-4.*: xslt t
0250: 72 61 6e 73 66 6f 72 6d 61 74 69 6f 6e 73 20 6f  ransformations o
0260: 6e 20 6d 6f 64 69 66 69 65 64 2f 63 72 65 61 74  n modified/creat
0270: 65 64 20 66 72 6f 6d 20 74 68 65 20 73 63 72 61  ed from the scra
0280: 74 63 68 20 64 6f 63 73 0a 23 20 20 20 20 78 73  tch docs.#    xs
0290: 6c 74 2d 35 2e 2a 3a 20 45 78 74 65 72 6e 61 6c  lt-5.*: External
02a0: 20 64 6f 63 75 6d 65 6e 74 73 3a 20 64 6f 63 75   documents: docu
02b0: 6d 65 6e 74 28 29 2c 20 78 73 6c 3a 69 6d 70 6f  ment(), xsl:impo
02c0: 72 74 2c 20 78 73 6c 3a 69 6e 63 6c 75 64 65 0a  rt, xsl:include.
02d0: 23 20 20 20 20 78 73 6c 74 2d 36 2e 2a 3a 20 78  #    xslt-6.*: x
02e0: 73 6c 3a 6f 75 74 70 75 74 0a 23 20 20 20 20 78  sl:output.#    x
02f0: 73 6c 74 2d 37 2e 2a 3a 20 74 65 73 74 73 20 72  slt-7.*: tests r
0300: 65 6c 61 74 65 64 20 74 6f 20 74 68 65 20 63 72  elated to the cr
0310: 65 61 74 65 64 20 72 65 73 75 6c 74 20 64 6f 63  eated result doc
0320: 0a 23 20 20 20 20 78 73 6c 74 2d 38 2e 2a 3a 20  .#    xslt-8.*: 
0330: 41 64 64 69 74 69 6f 6e 61 6c 20 78 73 6c 74 20  Additional xslt 
0340: 72 65 63 20 63 6f 6d 70 6c 69 61 6e 63 65 20 74  rec compliance t
0350: 65 73 74 73 20 28 64 65 74 61 69 6c 73 20 6e 6f  ests (details no
0360: 74 20 63 6f 76 65 72 65 64 20 62 79 0a 23 20 20  t covered by.#  
0370: 20 20 20 20 20 20 20 20 20 20 20 20 62 79 20 74              by t
0380: 68 65 20 65 78 74 65 72 6e 61 6c 20 78 73 6c 74  he external xslt
0390: 20 63 6f 6d 70 6c 69 61 6e 63 65 20 74 65 73 74   compliance test
03a0: 20 73 75 69 74 65 29 2e 0a 23 20 20 20 20 78 73   suite)..#    xs
03b0: 6c 74 2d 39 2e 2a 3a 20 78 73 6c 74 20 74 72 61  lt-9.*: xslt tra
03c0: 6e 73 66 6f 72 6d 61 74 69 6f 6e 73 20 74 68 61  nsformations tha
03d0: 74 20 61 72 65 20 75 73 69 6e 67 20 73 63 72 69  t are using scri
03e0: 70 74 65 64 20 78 70 61 74 68 20 66 75 6e 63 74  pted xpath funct
03f0: 69 6f 6e 73 0a 23 0a 23 20 43 6f 70 79 72 69 67  ions.#.# Copyrig
0400: 68 74 20 28 63 29 20 32 30 30 32 20 2d 20 32 30  ht (c) 2002 - 20
0410: 30 35 2c 20 32 30 31 33 20 52 6f 6c 66 20 41 64  05, 2013 Rolf Ad
0420: 65 2e 0a 23 0a 23 20 52 43 53 3a 20 40 28 23 29  e..#.# RCS: @(#)
0430: 20 24 49 64 24 0a 0a 73 6f 75 72 63 65 20 5b 66   $Id$..source [f
0440: 69 6c 65 20 6a 6f 69 6e 20 5b 66 69 6c 65 20 64  ile join [file d
0450: 69 72 20 5b 69 6e 66 6f 20 73 63 72 69 70 74 5d  ir [info script]
0460: 5d 20 6c 6f 61 64 74 64 6f 6d 2e 74 63 6c 5d 0a  ] loadtdom.tcl].
0470: 0a 74 65 73 74 20 78 73 6c 74 2d 31 2e 31 20 7b  .test xslt-1.1 {
0480: 75 6e 69 63 6f 64 65 20 63 68 61 72 73 20 6f 75  unicode chars ou
0490: 74 73 69 64 65 20 6f 66 20 55 53 2d 41 53 43 49  tside of US-ASCI
04a0: 49 20 69 6e 20 76 61 72 20 6e 61 6d 65 7d 20 7b  I in var name} {
04b0: 0a 20 20 20 20 20 73 65 74 20 78 6d 6c 20 5b 64  .     set xml [d
04c0: 6f 6d 20 70 61 72 73 65 20 7b 3c 72 6f 6f 74 2f  om parse {<root/
04d0: 3e 7d 5d 0a 20 20 20 20 20 73 65 74 20 78 73 6c  >}].     set xsl
04e0: 74 20 5b 64 6f 6d 20 70 61 72 73 65 20 5b 74 64  t [dom parse [td
04f0: 6f 6d 3a 3a 78 6d 6c 52 65 61 64 46 69 6c 65 20  om::xmlReadFile 
0500: 5b 66 69 6c 65 20 6a 6f 69 6e 20 5b 70 77 64 5d  [file join [pwd]
0510: 20 5b 66 69 6c 65 20 64 69 72 20 5b 69 6e 66 6f   [file dir [info
0520: 20 73 63 72 69 70 74 5d 5d 20 64 61 74 61 2f 78   script]] data/x
0530: 73 6c 74 5f 31 2e 78 73 6c 5d 5d 5d 0a 20 20 20  slt_1.xsl]]].   
0540: 20 20 73 65 74 20 78 6d 6c 72 6f 6f 74 20 5b 24    set xmlroot [$
0550: 78 6d 6c 20 64 6f 63 75 6d 65 6e 74 45 6c 65 6d  xml documentElem
0560: 65 6e 74 5d 0a 20 20 20 20 20 24 78 6d 6c 72 6f  ent].     $xmlro
0570: 6f 74 20 78 73 6c 74 20 24 78 73 6c 74 20 72 65  ot xslt $xslt re
0580: 73 75 6c 74 44 6f 63 0a 20 20 20 20 20 73 65 74  sultDoc.     set
0590: 20 72 65 73 75 6c 74 72 6f 6f 74 20 5b 24 72 65   resultroot [$re
05a0: 73 75 6c 74 44 6f 63 20 64 6f 63 75 6d 65 6e 74  sultDoc document
05b0: 45 6c 65 6d 65 6e 74 5d 0a 20 20 20 20 20 73 65  Element].     se
05c0: 74 20 72 65 73 75 6c 74 20 5b 24 72 65 73 75 6c  t result [$resul
05d0: 74 72 6f 6f 74 20 61 73 58 4d 4c 5d 0a 20 20 20  troot asXML].   
05e0: 20 20 24 78 6d 6c 20 64 65 6c 65 74 65 0a 20 20    $xml delete.  
05f0: 20 20 20 24 78 73 6c 74 20 64 65 6c 65 74 65 0a     $xslt delete.
0600: 20 20 20 20 20 24 72 65 73 75 6c 74 44 6f 63 20       $resultDoc 
0610: 64 65 6c 65 74 65 0a 20 20 20 20 20 73 65 74 20  delete.     set 
0620: 72 65 73 75 6c 74 0a 7d 20 7b 66 6f 6f 7d 0a 0a  result.} {foo}..
0630: 0a 74 65 73 74 20 78 73 6c 74 2d 31 2e 32 20 7b  .test xslt-1.2 {
0640: 78 70 61 74 68 20 70 61 72 73 65 20 72 65 61 6c  xpath parse real
0650: 20 6e 75 6d 62 65 72 7d 20 7b 0a 20 20 20 20 20   number} {.     
0660: 73 65 74 20 78 6d 6c 20 5b 64 6f 6d 20 70 61 72  set xml [dom par
0670: 73 65 20 7b 3c 72 6f 6f 74 2f 3e 7d 5d 0a 20 20  se {<root/>}].  
0680: 20 20 20 73 65 74 20 78 73 6c 74 20 5b 64 6f 6d     set xslt [dom
0690: 20 70 61 72 73 65 20 7b 3c 78 73 6c 3a 73 74 79   parse {<xsl:sty
06a0: 6c 65 73 68 65 65 74 20 0a 20 20 78 6d 6c 6e 73  lesheet .  xmlns
06b0: 3a 78 73 6c 3d 22 68 74 74 70 3a 2f 2f 77 77 77  :xsl="http://www
06c0: 2e 77 33 2e 6f 72 67 2f 31 39 39 39 2f 58 53 4c  .w3.org/1999/XSL
06d0: 2f 54 72 61 6e 73 66 6f 72 6d 22 0a 20 20 76 65  /Transform".  ve
06e0: 72 73 69 6f 6e 3d 22 31 2e 30 22 3e 0a 20 20 3c  rsion="1.0">.  <
06f0: 78 73 6c 3a 74 65 6d 70 6c 61 74 65 20 6d 61 74  xsl:template mat
0700: 63 68 3d 22 2f 22 3e 0a 20 20 20 20 20 20 3c 78  ch="/">.      <x
0710: 73 6c 3a 76 61 6c 75 65 2d 6f 66 20 73 65 6c 65  sl:value-of sele
0720: 63 74 3d 22 2e 31 32 33 34 35 22 2f 3e 0a 20 20  ct=".12345"/>.  
0730: 3c 2f 78 73 6c 3a 74 65 6d 70 6c 61 74 65 3e 0a  </xsl:template>.
0740: 3c 2f 78 73 6c 3a 73 74 79 6c 65 73 68 65 65 74  </xsl:stylesheet
0750: 3e 7d 5d 0a 20 20 20 20 20 73 65 74 20 78 6d 6c  >}].     set xml
0760: 72 6f 6f 74 20 5b 24 78 6d 6c 20 64 6f 63 75 6d  root [$xml docum
0770: 65 6e 74 45 6c 65 6d 65 6e 74 5d 0a 20 20 20 20  entElement].    
0780: 20 24 78 6d 6c 72 6f 6f 74 20 78 73 6c 74 20 24   $xmlroot xslt $
0790: 78 73 6c 74 20 72 65 73 75 6c 74 44 6f 63 0a 20  xslt resultDoc. 
07a0: 20 20 20 20 73 65 74 20 72 65 73 75 6c 74 72 6f      set resultro
07b0: 6f 74 20 5b 24 72 65 73 75 6c 74 44 6f 63 20 64  ot [$resultDoc d
07c0: 6f 63 75 6d 65 6e 74 45 6c 65 6d 65 6e 74 5d 0a  ocumentElement].
07d0: 20 20 20 20 20 73 65 74 20 72 65 73 75 6c 74 20       set result 
07e0: 5b 24 72 65 73 75 6c 74 72 6f 6f 74 20 61 73 58  [$resultroot asX
07f0: 4d 4c 5d 0a 20 20 20 20 20 24 78 6d 6c 20 64 65  ML].     $xml de
0800: 6c 65 74 65 0a 20 20 20 20 20 24 78 73 6c 74 20  lete.     $xslt 
0810: 64 65 6c 65 74 65 0a 20 20 20 20 20 24 72 65 73  delete.     $res
0820: 75 6c 74 44 6f 63 20 64 65 6c 65 74 65 0a 20 20  ultDoc delete.  
0830: 20 20 20 73 65 74 20 72 65 73 75 6c 74 0a 7d 20     set result.} 
0840: 7b 30 2e 31 32 33 34 35 7d 0a 0a 74 65 73 74 20  {0.12345}..test 
0850: 78 73 6c 74 2d 31 2e 33 20 7b 78 70 61 74 68 20  xslt-1.3 {xpath 
0860: 70 61 72 73 65 20 72 65 61 6c 20 6e 75 6d 62 65  parse real numbe
0870: 72 7d 20 7b 0a 20 20 20 20 73 65 74 20 78 6d 6c  r} {.    set xml
0880: 20 5b 64 6f 6d 20 70 61 72 73 65 20 7b 3c 72 6f   [dom parse {<ro
0890: 6f 74 2f 3e 7d 5d 0a 20 20 20 20 73 65 74 20 78  ot/>}].    set x
08a0: 73 6c 74 20 5b 64 6f 6d 20 70 61 72 73 65 20 7b  slt [dom parse {
08b0: 3c 78 73 6c 3a 73 74 79 6c 65 73 68 65 65 74 20  <xsl:stylesheet 
08c0: 0a 20 20 78 6d 6c 6e 73 3a 78 73 6c 3d 22 68 74  .  xmlns:xsl="ht
08d0: 74 70 3a 2f 2f 77 77 77 2e 77 33 2e 6f 72 67 2f  tp://www.w3.org/
08e0: 31 39 39 39 2f 58 53 4c 2f 54 72 61 6e 73 66 6f  1999/XSL/Transfo
08f0: 72 6d 22 0a 20 20 76 65 72 73 69 6f 6e 3d 22 31  rm".  version="1
0900: 2e 30 22 3e 0a 20 20 3c 78 73 6c 3a 74 65 6d 70  .0">.  <xsl:temp
0910: 6c 61 74 65 20 6d 61 74 63 68 3d 22 2f 22 3e 0a  late match="/">.
0920: 20 20 20 20 20 20 3c 78 73 6c 3a 76 61 6c 75 65        <xsl:value
0930: 2d 6f 66 20 73 65 6c 65 63 74 3d 22 2d 2e 31 32  -of select="-.12
0940: 33 34 35 22 2f 3e 0a 20 20 3c 2f 78 73 6c 3a 74  345"/>.  </xsl:t
0950: 65 6d 70 6c 61 74 65 3e 0a 3c 2f 78 73 6c 3a 73  emplate>.</xsl:s
0960: 74 79 6c 65 73 68 65 65 74 3e 7d 5d 0a 20 20 20  tylesheet>}].   
0970: 20 73 65 74 20 78 6d 6c 72 6f 6f 74 20 5b 24 78   set xmlroot [$x
0980: 6d 6c 20 64 6f 63 75 6d 65 6e 74 45 6c 65 6d 65  ml documentEleme
0990: 6e 74 5d 0a 20 20 20 20 24 78 6d 6c 72 6f 6f 74  nt].    $xmlroot
09a0: 20 78 73 6c 74 20 24 78 73 6c 74 20 72 65 73 75   xslt $xslt resu
09b0: 6c 74 44 6f 63 0a 20 20 20 20 73 65 74 20 72 65  ltDoc.    set re
09c0: 73 75 6c 74 72 6f 6f 74 20 5b 24 72 65 73 75 6c  sultroot [$resul
09d0: 74 44 6f 63 20 64 6f 63 75 6d 65 6e 74 45 6c 65  tDoc documentEle
09e0: 6d 65 6e 74 5d 0a 20 20 20 20 73 65 74 20 72 65  ment].    set re
09f0: 73 75 6c 74 20 5b 24 72 65 73 75 6c 74 72 6f 6f  sult [$resultroo
0a00: 74 20 61 73 58 4d 4c 5d 0a 20 20 20 20 24 78 6d  t asXML].    $xm
0a10: 6c 20 64 65 6c 65 74 65 0a 20 20 20 20 24 78 73  l delete.    $xs
0a20: 6c 74 20 64 65 6c 65 74 65 0a 20 20 20 20 24 72  lt delete.    $r
0a30: 65 73 75 6c 74 44 6f 63 20 64 65 6c 65 74 65 0a  esultDoc delete.
0a40: 20 20 20 20 73 65 74 20 72 65 73 75 6c 74 0a 7d      set result.}
0a50: 20 7b 2d 30 2e 31 32 33 34 35 7d 0a 0a 74 65 73   {-0.12345}..tes
0a60: 74 20 78 73 6c 74 2d 31 2e 34 20 7b 70 61 74 74  t xslt-1.4 {patt
0a70: 65 72 6e 20 49 73 46 51 45 6c 65 6d 65 6e 74 20  ern IsFQElement 
0a80: 77 69 74 68 20 46 69 6c 6c 4e 6f 64 65 4c 69 73  with FillNodeLis
0a90: 74 7d 20 7b 0a 20 20 20 20 20 73 65 74 20 78 6d  t} {.     set xm
0aa0: 6c 20 5b 64 6f 6d 20 70 61 72 73 65 20 7b 3c 6d  l [dom parse {<m
0ab0: 3a 65 6c 65 6d 20 78 6d 6c 6e 73 3a 6d 3d 22 66  :elem xmlns:m="f
0ac0: 6f 6f 22 2f 3e 7d 5d 0a 20 20 20 20 73 65 74 20  oo"/>}].    set 
0ad0: 78 73 6c 74 20 5b 64 6f 6d 20 70 61 72 73 65 20  xslt [dom parse 
0ae0: 7b 3c 78 73 6c 3a 73 74 79 6c 65 73 68 65 65 74  {<xsl:stylesheet
0af0: 20 0a 20 20 78 6d 6c 6e 73 3a 78 73 6c 3d 22 68   .  xmlns:xsl="h
0b00: 74 74 70 3a 2f 2f 77 77 77 2e 77 33 2e 6f 72 67  ttp://www.w3.org
0b10: 2f 31 39 39 39 2f 58 53 4c 2f 54 72 61 6e 73 66  /1999/XSL/Transf
0b20: 6f 72 6d 22 0a 20 20 78 6d 6c 6e 73 3a 6d 3d 22  orm".  xmlns:m="
0b30: 66 6f 6f 22 0a 20 20 76 65 72 73 69 6f 6e 3d 22  foo".  version="
0b40: 31 2e 30 22 3e 0a 0a 20 20 20 20 3c 78 73 6c 3a  1.0">..    <xsl:
0b50: 74 65 6d 70 6c 61 74 65 20 6d 61 74 63 68 3d 22  template match="
0b60: 6d 3a 65 6c 65 6d 5b 31 5d 22 3e 0a 20 20 20 20  m:elem[1]">.    
0b70: 20 20 3c 6f 75 74 3e 3c 78 73 6c 3a 76 61 6c 75    <out><xsl:valu
0b80: 65 2d 6f 66 20 73 65 6c 65 63 74 3d 22 6e 61 6d  e-of select="nam
0b90: 65 28 2e 29 22 2f 3e 3c 2f 6f 75 74 3e 0a 20 20  e(.)"/></out>.  
0ba0: 20 20 3c 2f 78 73 6c 3a 74 65 6d 70 6c 61 74 65    </xsl:template
0bb0: 3e 0a 3c 2f 78 73 6c 3a 73 74 79 6c 65 73 68 65  >.</xsl:styleshe
0bc0: 65 74 3e 7d 5d 0a 20 20 20 20 24 78 6d 6c 20 78  et>}].    $xml x
0bd0: 73 6c 74 20 24 78 73 6c 74 20 72 65 73 75 6c 74  slt $xslt result
0be0: 44 6f 63 0a 20 20 20 20 73 65 74 20 72 65 73 75  Doc.    set resu
0bf0: 6c 74 20 5b 24 72 65 73 75 6c 74 44 6f 63 20 61  lt [$resultDoc a
0c00: 73 58 4d 4c 20 2d 69 6e 64 65 6e 74 20 6e 6f 6e  sXML -indent non
0c10: 65 5d 0a 20 20 20 20 24 78 73 6c 74 20 64 65 6c  e].    $xslt del
0c20: 65 74 65 0a 20 20 20 20 24 78 6d 6c 20 64 65 6c  ete.    $xml del
0c30: 65 74 65 0a 20 20 20 20 24 72 65 73 75 6c 74 44  ete.    $resultD
0c40: 6f 63 20 64 65 6c 65 74 65 0a 20 20 20 20 73 65  oc delete.    se
0c50: 74 20 72 65 73 75 6c 74 0a 7d 20 7b 3c 6f 75 74  t result.} {<out
0c60: 20 78 6d 6c 6e 73 3a 6d 3d 22 66 6f 6f 22 3e 6d   xmlns:m="foo">m
0c70: 3a 65 6c 65 6d 3c 2f 6f 75 74 3e 7d 0a 0a 74 65  :elem</out>}..te
0c80: 73 74 20 78 73 6c 74 2d 31 2e 35 20 7b 73 70 61  st xslt-1.5 {spa
0c90: 63 65 20 62 65 74 77 65 65 6e 20 5c 24 20 61 6e  ce between \$ an
0ca0: 64 20 76 61 72 6e 61 6d 65 7d 20 7b 0a 20 20 20  d varname} {.   
0cb0: 20 73 65 74 20 78 6d 6c 20 5b 64 6f 6d 20 70 61   set xml [dom pa
0cc0: 72 73 65 20 7b 3c 72 6f 6f 74 2f 3e 7d 5d 0a 20  rse {<root/>}]. 
0cd0: 20 20 20 73 65 74 20 78 73 6c 74 20 5b 64 6f 6d     set xslt [dom
0ce0: 20 70 61 72 73 65 20 7b 3c 78 73 6c 3a 73 74 79   parse {<xsl:sty
0cf0: 6c 65 73 68 65 65 74 20 0a 20 20 78 6d 6c 6e 73  lesheet .  xmlns
0d00: 3a 78 73 6c 3d 22 68 74 74 70 3a 2f 2f 77 77 77  :xsl="http://www
0d10: 2e 77 33 2e 6f 72 67 2f 31 39 39 39 2f 58 53 4c  .w3.org/1999/XSL
0d20: 2f 54 72 61 6e 73 66 6f 72 6d 22 0a 20 20 76 65  /Transform".  ve
0d30: 72 73 69 6f 6e 3d 22 31 2e 30 22 3e 0a 20 20 20  rsion="1.0">.   
0d40: 20 20 3c 78 73 6c 3a 76 61 72 69 61 62 6c 65 20    <xsl:variable 
0d50: 6e 61 6d 65 3d 22 76 61 72 22 20 73 65 6c 65 63  name="var" selec
0d60: 74 3d 22 27 76 61 6c 75 65 27 22 2f 3e 0a 20 20  t="'value'"/>.  
0d70: 20 20 20 3c 78 73 6c 3a 74 65 6d 70 6c 61 74 65     <xsl:template
0d80: 20 6d 61 74 63 68 3d 22 2f 22 3e 0a 20 20 20 20   match="/">.    
0d90: 20 20 20 3c 6f 75 74 3e 3c 78 73 6c 3a 76 61 6c     <out><xsl:val
0da0: 75 65 2d 6f 66 20 73 65 6c 65 63 74 3d 22 24 20  ue-of select="$ 
0db0: 20 76 61 72 22 2f 3e 3c 2f 6f 75 74 3e 0a 20 20   var"/></out>.  
0dc0: 20 20 20 3c 2f 78 73 6c 3a 74 65 6d 70 6c 61 74     </xsl:templat
0dd0: 65 3e 0a 3c 2f 78 73 6c 3a 73 74 79 6c 65 73 68  e>.</xsl:stylesh
0de0: 65 65 74 3e 7d 5d 0a 20 20 20 20 73 65 74 20 78  eet>}].    set x
0df0: 73 6c 74 43 6d 64 20 5b 24 78 73 6c 74 20 74 6f  sltCmd [$xslt to
0e00: 58 53 4c 54 63 6d 64 5d 0a 20 20 20 20 73 65 74  XSLTcmd].    set
0e10: 20 72 65 73 75 6c 74 20 5b 63 61 74 63 68 20 7b   result [catch {
0e20: 73 65 74 20 72 65 73 75 6c 74 44 6f 63 20 5b 24  set resultDoc [$
0e30: 78 73 6c 74 43 6d 64 20 74 72 61 6e 73 66 6f 72  xsltCmd transfor
0e40: 6d 20 24 78 6d 6c 5d 7d 20 65 72 72 4d 73 67 5d  m $xml]} errMsg]
0e50: 0a 20 20 20 20 24 78 73 6c 74 43 6d 64 20 64 65  .    $xsltCmd de
0e60: 6c 65 74 65 0a 20 20 20 20 24 78 6d 6c 20 64 65  lete.    $xml de
0e70: 6c 65 74 65 0a 20 20 20 20 6c 61 70 70 65 6e 64  lete.    lappend
0e80: 20 72 65 73 75 6c 74 20 24 65 72 72 4d 73 67 0a   result $errMsg.
0e90: 7d 20 7b 31 20 7b 45 78 70 65 63 74 65 64 20 76  } {1 {Expected v
0ea0: 61 72 69 61 62 6c 65 20 6e 61 6d 65 7d 7d 0a 0a  ariable name}}..
0eb0: 74 65 73 74 20 78 73 6c 74 2d 31 2e 36 20 7b 73  test xslt-1.6 {s
0ec0: 70 61 63 65 20 69 6e 20 6e 6f 64 65 74 65 73 74  pace in nodetest
0ed0: 20 6e 6f 64 65 28 20 20 29 7d 20 7b 0a 20 20 20   node(  )} {.   
0ee0: 20 73 65 74 20 78 6d 6c 20 5b 64 6f 6d 20 70 61   set xml [dom pa
0ef0: 72 73 65 20 7b 3c 64 6f 63 3e 3c 65 2f 3e 74 65  rse {<doc><e/>te
0f00: 78 74 3c 65 2f 3e 3c 2f 64 6f 63 3e 7d 5d 0a 20  xt<e/></doc>}]. 
0f10: 20 20 20 73 65 74 20 78 73 6c 74 20 5b 64 6f 6d     set xslt [dom
0f20: 20 70 61 72 73 65 20 7b 3c 78 73 6c 3a 73 74 79   parse {<xsl:sty
0f30: 6c 65 73 68 65 65 74 20 0a 20 20 78 6d 6c 6e 73  lesheet .  xmlns
0f40: 3a 78 73 6c 3d 22 68 74 74 70 3a 2f 2f 77 77 77  :xsl="http://www
0f50: 2e 77 33 2e 6f 72 67 2f 31 39 39 39 2f 58 53 4c  .w3.org/1999/XSL
0f60: 2f 54 72 61 6e 73 66 6f 72 6d 22 0a 20 20 76 65  /Transform".  ve
0f70: 72 73 69 6f 6e 3d 22 31 2e 30 22 3e 0a 20 20 20  rsion="1.0">.   
0f80: 20 20 3c 78 73 6c 3a 74 65 6d 70 6c 61 74 65 20    <xsl:template 
0f90: 6d 61 74 63 68 3d 22 64 6f 63 22 3e 0a 20 20 20  match="doc">.   
0fa0: 20 20 20 20 3c 78 73 6c 3a 76 61 6c 75 65 2d 6f      <xsl:value-o
0fb0: 66 20 73 65 6c 65 63 74 3d 22 63 6f 75 6e 74 28  f select="count(
0fc0: 6e 6f 64 65 28 20 20 20 29 29 22 2f 3e 0a 20 20  node(   ))"/>.  
0fd0: 20 20 20 3c 2f 78 73 6c 3a 74 65 6d 70 6c 61 74     </xsl:templat
0fe0: 65 3e 0a 20 20 20 3c 2f 78 73 6c 3a 73 74 79 6c  e>.   </xsl:styl
0ff0: 65 73 68 65 65 74 3e 7d 5d 0a 20 20 20 20 73 65  esheet>}].    se
1000: 74 20 78 73 6c 74 43 6d 64 20 5b 24 78 73 6c 74  t xsltCmd [$xslt
1010: 20 74 6f 58 53 4c 54 63 6d 64 5d 0a 20 20 20 20   toXSLTcmd].    
1020: 73 65 74 20 72 65 73 75 6c 74 44 6f 63 20 5b 24  set resultDoc [$
1030: 78 73 6c 74 43 6d 64 20 74 72 61 6e 73 66 6f 72  xsltCmd transfor
1040: 6d 20 24 78 6d 6c 5d 0a 20 20 20 20 24 78 73 6c  m $xml].    $xsl
1050: 74 43 6d 64 20 64 65 6c 65 74 65 0a 20 20 20 20  tCmd delete.    
1060: 24 78 6d 6c 20 64 65 6c 65 74 65 0a 20 20 20 20  $xml delete.    
1070: 73 65 74 20 72 65 73 75 6c 74 20 5b 24 72 65 73  set result [$res
1080: 75 6c 74 44 6f 63 20 61 73 54 65 78 74 5d 0a 20  ultDoc asText]. 
1090: 20 20 20 24 72 65 73 75 6c 74 44 6f 63 20 64 65     $resultDoc de
10a0: 6c 65 74 65 0a 20 20 20 20 73 65 74 20 72 65 73  lete.    set res
10b0: 75 6c 74 0a 7d 20 7b 33 7d 0a 0a 74 65 73 74 20  ult.} {3}..test 
10c0: 78 73 6c 74 2d 32 2e 31 20 7b 78 73 6c 74 20 74  xslt-2.1 {xslt t
10d0: 6f 70 20 6c 65 76 65 6c 20 70 61 72 61 6d 65 74  op level paramet
10e0: 65 72 3a 20 75 73 65 20 64 65 66 61 75 6c 74 20  er: use default 
10f0: 76 61 6c 75 65 7d 20 7b 0a 20 20 20 20 73 65 74  value} {.    set
1100: 20 78 6d 6c 20 5b 64 6f 6d 20 70 61 72 73 65 20   xml [dom parse 
1110: 7b 3c 72 6f 6f 74 2f 3e 7d 5d 0a 20 20 20 20 73  {<root/>}].    s
1120: 65 74 20 78 73 6c 74 20 5b 64 6f 6d 20 70 61 72  et xslt [dom par
1130: 73 65 20 7b 3c 78 73 6c 3a 73 74 79 6c 65 73 68  se {<xsl:stylesh
1140: 65 65 74 20 0a 20 20 78 6d 6c 6e 73 3a 78 73 6c  eet .  xmlns:xsl
1150: 3d 22 68 74 74 70 3a 2f 2f 77 77 77 2e 77 33 2e  ="http://www.w3.
1160: 6f 72 67 2f 31 39 39 39 2f 58 53 4c 2f 54 72 61  org/1999/XSL/Tra
1170: 6e 73 66 6f 72 6d 22 0a 20 20 76 65 72 73 69 6f  nsform".  versio
1180: 6e 3d 22 31 2e 30 22 3e 0a 20 20 3c 78 73 6c 3a  n="1.0">.  <xsl:
1190: 70 61 72 61 6d 20 6e 61 6d 65 3d 22 70 61 72 61  param name="para
11a0: 6d 65 74 65 72 31 22 20 73 65 6c 65 63 74 3d 22  meter1" select="
11b0: 27 70 61 72 61 6d 65 74 65 72 31 56 61 6c 75 65  'parameter1Value
11c0: 27 22 2f 3e 0a 20 20 3c 78 73 6c 3a 74 65 6d 70  '"/>.  <xsl:temp
11d0: 6c 61 74 65 20 6d 61 74 63 68 3d 22 2f 22 3e 0a  late match="/">.
11e0: 20 20 20 20 3c 78 73 6c 3a 76 61 6c 75 65 2d 6f      <xsl:value-o
11f0: 66 20 73 65 6c 65 63 74 3d 22 24 70 61 72 61 6d  f select="$param
1200: 65 74 65 72 31 22 2f 3e 0a 20 20 3c 2f 78 73 6c  eter1"/>.  </xsl
1210: 3a 74 65 6d 70 6c 61 74 65 3e 0a 3c 2f 78 73 6c  :template>.</xsl
1220: 3a 73 74 79 6c 65 73 68 65 65 74 3e 7d 5d 20 0a  :stylesheet>}] .
1230: 20 20 20 20 73 65 74 20 78 6d 6c 72 6f 6f 74 20      set xmlroot 
1240: 5b 24 78 6d 6c 20 64 6f 63 75 6d 65 6e 74 45 6c  [$xml documentEl
1250: 65 6d 65 6e 74 5d 0a 20 20 20 20 24 78 6d 6c 72  ement].    $xmlr
1260: 6f 6f 74 20 78 73 6c 74 20 24 78 73 6c 74 20 72  oot xslt $xslt r
1270: 65 73 75 6c 74 44 6f 63 0a 20 20 20 20 73 65 74  esultDoc.    set
1280: 20 72 65 73 75 6c 74 72 6f 6f 74 20 5b 24 72 65   resultroot [$re
1290: 73 75 6c 74 44 6f 63 20 64 6f 63 75 6d 65 6e 74  sultDoc document
12a0: 45 6c 65 6d 65 6e 74 5d 0a 20 20 20 20 73 65 74  Element].    set
12b0: 20 72 65 73 75 6c 74 20 5b 24 72 65 73 75 6c 74   result [$result
12c0: 72 6f 6f 74 20 61 73 58 4d 4c 5d 0a 20 20 20 20  root asXML].    
12d0: 24 78 6d 6c 20 64 65 6c 65 74 65 0a 20 20 20 20  $xml delete.    
12e0: 24 78 73 6c 74 20 64 65 6c 65 74 65 0a 20 20 20  $xslt delete.   
12f0: 20 24 72 65 73 75 6c 74 44 6f 63 20 64 65 6c 65   $resultDoc dele
1300: 74 65 0a 20 20 20 20 73 65 74 20 72 65 73 75 6c  te.    set resul
1310: 74 0a 7d 20 7b 70 61 72 61 6d 65 74 65 72 31 56  t.} {parameter1V
1320: 61 6c 75 65 7d 0a 0a 74 65 73 74 20 78 73 6c 74  alue}..test xslt
1330: 2d 32 2e 32 20 7b 78 73 6c 74 20 74 6f 70 20 6c  -2.2 {xslt top l
1340: 65 76 65 6c 20 70 61 72 61 6d 65 74 65 72 3a 20  evel parameter: 
1350: 6f 76 65 72 77 72 69 74 65 20 64 65 66 61 75 6c  overwrite defaul
1360: 74 20 76 61 6c 75 65 20 77 69 74 68 20 2d 70 61  t value with -pa
1370: 72 61 6d 65 74 65 72 73 7d 20 7b 0a 20 20 20 20  rameters} {.    
1380: 73 65 74 20 78 6d 6c 20 5b 64 6f 6d 20 70 61 72  set xml [dom par
1390: 73 65 20 7b 3c 72 6f 6f 74 2f 3e 7d 5d 0a 20 20  se {<root/>}].  
13a0: 20 20 73 65 74 20 78 73 6c 74 20 5b 64 6f 6d 20    set xslt [dom 
13b0: 70 61 72 73 65 20 7b 3c 78 73 6c 3a 73 74 79 6c  parse {<xsl:styl
13c0: 65 73 68 65 65 74 20 0a 20 20 78 6d 6c 6e 73 3a  esheet .  xmlns:
13d0: 78 73 6c 3d 22 68 74 74 70 3a 2f 2f 77 77 77 2e  xsl="http://www.
13e0: 77 33 2e 6f 72 67 2f 31 39 39 39 2f 58 53 4c 2f  w3.org/1999/XSL/
13f0: 54 72 61 6e 73 66 6f 72 6d 22 0a 20 20 76 65 72  Transform".  ver
1400: 73 69 6f 6e 3d 22 31 2e 30 22 3e 0a 20 20 3c 78  sion="1.0">.  <x
1410: 73 6c 3a 70 61 72 61 6d 20 6e 61 6d 65 3d 22 70  sl:param name="p
1420: 61 72 61 6d 65 74 65 72 31 22 20 73 65 6c 65 63  arameter1" selec
1430: 74 3d 22 27 70 61 72 61 6d 65 74 65 72 31 56 61  t="'parameter1Va
1440: 6c 75 65 27 22 2f 3e 0a 20 20 3c 78 73 6c 3a 74  lue'"/>.  <xsl:t
1450: 65 6d 70 6c 61 74 65 20 6d 61 74 63 68 3d 22 2f  emplate match="/
1460: 22 3e 0a 20 20 20 20 3c 78 73 6c 3a 76 61 6c 75  ">.    <xsl:valu
1470: 65 2d 6f 66 20 73 65 6c 65 63 74 3d 22 24 70 61  e-of select="$pa
1480: 72 61 6d 65 74 65 72 31 22 2f 3e 0a 20 20 3c 2f  rameter1"/>.  </
1490: 78 73 6c 3a 74 65 6d 70 6c 61 74 65 3e 0a 3c 2f  xsl:template>.</
14a0: 78 73 6c 3a 73 74 79 6c 65 73 68 65 65 74 3e 7d  xsl:stylesheet>}
14b0: 5d 20 0a 20 20 20 20 73 65 74 20 78 6d 6c 72 6f  ] .    set xmlro
14c0: 6f 74 20 5b 24 78 6d 6c 20 64 6f 63 75 6d 65 6e  ot [$xml documen
14d0: 74 45 6c 65 6d 65 6e 74 5d 0a 20 20 20 20 24 78  tElement].    $x
14e0: 6d 6c 72 6f 6f 74 20 78 73 6c 74 20 2d 70 61 72  mlroot xslt -par
14f0: 61 6d 65 74 65 72 73 20 7b 70 61 72 61 6d 65 74  ameters {paramet
1500: 65 72 31 20 73 74 61 72 74 56 61 6c 75 65 7d 20  er1 startValue} 
1510: 24 78 73 6c 74 20 72 65 73 75 6c 74 44 6f 63 0a  $xslt resultDoc.
1520: 20 20 20 20 73 65 74 20 72 65 73 75 6c 74 72 6f      set resultro
1530: 6f 74 20 5b 24 72 65 73 75 6c 74 44 6f 63 20 64  ot [$resultDoc d
1540: 6f 63 75 6d 65 6e 74 45 6c 65 6d 65 6e 74 5d 0a  ocumentElement].
1550: 20 20 20 20 73 65 74 20 72 65 73 75 6c 74 20 5b      set result [
1560: 24 72 65 73 75 6c 74 72 6f 6f 74 20 61 73 58 4d  $resultroot asXM
1570: 4c 5d 0a 20 20 20 20 24 78 6d 6c 20 64 65 6c 65  L].    $xml dele
1580: 74 65 0a 20 20 20 20 24 78 73 6c 74 20 64 65 6c  te.    $xslt del
1590: 65 74 65 0a 20 20 20 20 24 72 65 73 75 6c 74 44  ete.    $resultD
15a0: 6f 63 20 64 65 6c 65 74 65 0a 20 20 20 20 73 65  oc delete.    se
15b0: 74 20 72 65 73 75 6c 74 0a 7d 20 7b 73 74 61 72  t result.} {star
15c0: 74 56 61 6c 75 65 7d 0a 0a 0a 74 65 73 74 20 78  tValue}...test x
15d0: 73 6c 74 2d 32 2e 33 20 7b 78 73 6c 74 20 74 6f  slt-2.3 {xslt to
15e0: 70 20 6c 65 76 65 6c 20 70 61 72 61 6d 65 74 65  p level paramete
15f0: 72 3a 20 6f 76 65 72 77 72 69 74 65 20 64 65 66  r: overwrite def
1600: 61 75 6c 74 20 76 61 6c 75 65 20 77 69 74 68 20  ault value with 
1610: 2d 70 61 72 61 6d 65 74 65 72 73 7d 20 7b 0a 20  -parameters} {. 
1620: 20 20 20 73 65 74 20 78 6d 6c 20 5b 64 6f 6d 20     set xml [dom 
1630: 70 61 72 73 65 20 2d 6b 65 65 70 45 6d 70 74 69  parse -keepEmpti
1640: 65 73 20 7b 3c 72 6f 6f 74 2f 3e 7d 5d 0a 20 20  es {<root/>}].  
1650: 20 20 73 65 74 20 78 73 6c 74 20 5b 64 6f 6d 20    set xslt [dom 
1660: 70 61 72 73 65 20 2d 6b 65 65 70 45 6d 70 74 69  parse -keepEmpti
1670: 65 73 20 7b 3c 78 73 6c 3a 73 74 79 6c 65 73 68  es {<xsl:stylesh
1680: 65 65 74 20 0a 20 20 78 6d 6c 6e 73 3a 78 73 6c  eet .  xmlns:xsl
1690: 3d 22 68 74 74 70 3a 2f 2f 77 77 77 2e 77 33 2e  ="http://www.w3.
16a0: 6f 72 67 2f 31 39 39 39 2f 58 53 4c 2f 54 72 61  org/1999/XSL/Tra
16b0: 6e 73 66 6f 72 6d 22 0a 20 20 76 65 72 73 69 6f  nsform".  versio
16c0: 6e 3d 22 31 2e 30 22 3e 0a 20 20 3c 78 73 6c 3a  n="1.0">.  <xsl:
16d0: 70 61 72 61 6d 20 6e 61 6d 65 3d 22 70 61 72 61  param name="para
16e0: 6d 65 74 65 72 31 22 20 73 65 6c 65 63 74 3d 22  meter1" select="
16f0: 27 70 61 72 61 6d 65 74 65 72 31 56 61 6c 75 65  'parameter1Value
1700: 27 22 2f 3e 0a 20 20 3c 78 73 6c 3a 70 61 72 61  '"/>.  <xsl:para
1710: 6d 20 6e 61 6d 65 3d 22 70 61 72 61 6d 65 74 65  m name="paramete
1720: 72 32 22 20 73 65 6c 65 63 74 3d 22 27 70 61 72  r2" select="'par
1730: 61 6d 65 74 65 72 32 56 61 6c 75 65 27 22 2f 3e  ameter2Value'"/>
1740: 0a 20 20 3c 78 73 6c 3a 74 65 6d 70 6c 61 74 65  .  <xsl:template
1750: 20 6d 61 74 63 68 3d 22 2f 22 3e 0a 20 20 20 20   match="/">.    
1760: 3c 78 73 6c 3a 76 61 6c 75 65 2d 6f 66 20 73 65  <xsl:value-of se
1770: 6c 65 63 74 3d 22 24 70 61 72 61 6d 65 74 65 72  lect="$parameter
1780: 31 22 2f 3e 0a 20 20 20 20 3c 78 73 6c 3a 74 65  1"/>.    <xsl:te
1790: 78 74 3e 20 3c 2f 78 73 6c 3a 74 65 78 74 3e 0a  xt> </xsl:text>.
17a0: 20 20 20 20 3c 78 73 6c 3a 76 61 6c 75 65 2d 6f      <xsl:value-o
17b0: 66 20 73 65 6c 65 63 74 3d 22 24 70 61 72 61 6d  f select="$param
17c0: 65 74 65 72 32 22 2f 3e 0a 20 20 3c 2f 78 73 6c  eter2"/>.  </xsl
17d0: 3a 74 65 6d 70 6c 61 74 65 3e 0a 3c 2f 78 73 6c  :template>.</xsl
17e0: 3a 73 74 79 6c 65 73 68 65 65 74 3e 7d 5d 20 0a  :stylesheet>}] .
17f0: 20 20 20 20 73 65 74 20 78 6d 6c 72 6f 6f 74 20      set xmlroot 
1800: 5b 24 78 6d 6c 20 64 6f 63 75 6d 65 6e 74 45 6c  [$xml documentEl
1810: 65 6d 65 6e 74 5d 0a 20 20 20 20 24 78 6d 6c 72  ement].    $xmlr
1820: 6f 6f 74 20 78 73 6c 74 20 2d 70 61 72 61 6d 65  oot xslt -parame
1830: 74 65 72 73 20 7b 70 61 72 61 6d 65 74 65 72 31  ters {parameter1
1840: 20 73 74 61 72 74 56 61 6c 75 65 7d 20 24 78 73   startValue} $xs
1850: 6c 74 20 72 65 73 75 6c 74 44 6f 63 0a 20 20 20  lt resultDoc.   
1860: 20 73 65 74 20 72 65 73 75 6c 74 72 6f 6f 74 20   set resultroot 
1870: 5b 24 72 65 73 75 6c 74 44 6f 63 20 64 6f 63 75  [$resultDoc docu
1880: 6d 65 6e 74 45 6c 65 6d 65 6e 74 5d 0a 20 20 20  mentElement].   
1890: 20 73 65 74 20 72 65 73 75 6c 74 20 5b 24 72 65   set result [$re
18a0: 73 75 6c 74 72 6f 6f 74 20 61 73 58 4d 4c 5d 0a  sultroot asXML].
18b0: 20 20 20 20 24 78 6d 6c 20 64 65 6c 65 74 65 0a      $xml delete.
18c0: 20 20 20 20 24 78 73 6c 74 20 64 65 6c 65 74 65      $xslt delete
18d0: 0a 20 20 20 20 24 72 65 73 75 6c 74 44 6f 63 20  .    $resultDoc 
18e0: 64 65 6c 65 74 65 0a 20 20 20 20 73 65 74 20 72  delete.    set r
18f0: 65 73 75 6c 74 0a 7d 20 7b 73 74 61 72 74 56 61  esult.} {startVa
1900: 6c 75 65 20 70 61 72 61 6d 65 74 65 72 32 56 61  lue parameter2Va
1910: 6c 75 65 7d 0a 0a 74 65 73 74 20 78 73 6c 74 2d  lue}..test xslt-
1920: 32 2e 34 20 7b 78 73 6c 74 20 74 6f 70 20 6c 65  2.4 {xslt top le
1930: 76 65 6c 20 70 61 72 61 6d 65 74 65 72 3a 20 6f  vel parameter: o
1940: 76 65 72 77 72 69 74 65 20 64 65 66 61 75 6c 74  verwrite default
1950: 20 76 61 6c 75 65 20 77 69 74 68 20 2d 70 61 72   value with -par
1960: 61 6d 65 74 65 72 73 7d 20 7b 0a 20 20 20 20 73  ameters} {.    s
1970: 65 74 20 78 6d 6c 20 5b 64 6f 6d 20 70 61 72 73  et xml [dom pars
1980: 65 20 2d 6b 65 65 70 45 6d 70 74 69 65 73 20 7b  e -keepEmpties {
1990: 3c 72 6f 6f 74 2f 3e 7d 5d 0a 20 20 20 20 73 65  <root/>}].    se
19a0: 74 20 78 73 6c 74 20 5b 64 6f 6d 20 70 61 72 73  t xslt [dom pars
19b0: 65 20 2d 6b 65 65 70 45 6d 70 74 69 65 73 20 7b  e -keepEmpties {
19c0: 3c 78 73 6c 3a 73 74 79 6c 65 73 68 65 65 74 20  <xsl:stylesheet 
19d0: 0a 20 20 78 6d 6c 6e 73 3a 78 73 6c 3d 22 68 74  .  xmlns:xsl="ht
19e0: 74 70 3a 2f 2f 77 77 77 2e 77 33 2e 6f 72 67 2f  tp://www.w3.org/
19f0: 31 39 39 39 2f 58 53 4c 2f 54 72 61 6e 73 66 6f  1999/XSL/Transfo
1a00: 72 6d 22 0a 20 20 76 65 72 73 69 6f 6e 3d 22 31  rm".  version="1
1a10: 2e 30 22 3e 0a 20 20 3c 78 73 6c 3a 70 61 72 61  .0">.  <xsl:para
1a20: 6d 20 6e 61 6d 65 3d 22 70 61 72 61 6d 65 74 65  m name="paramete
1a30: 72 31 22 20 73 65 6c 65 63 74 3d 22 27 70 61 72  r1" select="'par
1a40: 61 6d 65 74 65 72 31 56 61 6c 75 65 27 22 2f 3e  ameter1Value'"/>
1a50: 0a 20 20 3c 78 73 6c 3a 70 61 72 61 6d 20 6e 61  .  <xsl:param na
1a60: 6d 65 3d 22 70 61 72 61 6d 65 74 65 72 32 22 20  me="parameter2" 
1a70: 73 65 6c 65 63 74 3d 22 27 70 61 72 61 6d 65 74  select="'paramet
1a80: 65 72 32 56 61 6c 75 65 27 22 2f 3e 0a 20 20 3c  er2Value'"/>.  <
1a90: 78 73 6c 3a 74 65 6d 70 6c 61 74 65 20 6d 61 74  xsl:template mat
1aa0: 63 68 3d 22 2f 22 3e 0a 20 20 20 20 3c 78 73 6c  ch="/">.    <xsl
1ab0: 3a 76 61 6c 75 65 2d 6f 66 20 73 65 6c 65 63 74  :value-of select
1ac0: 3d 22 24 70 61 72 61 6d 65 74 65 72 31 22 2f 3e  ="$parameter1"/>
1ad0: 0a 20 20 20 20 3c 78 73 6c 3a 74 65 78 74 3e 20  .    <xsl:text> 
1ae0: 3c 2f 78 73 6c 3a 74 65 78 74 3e 0a 20 20 20 20  </xsl:text>.    
1af0: 3c 78 73 6c 3a 76 61 6c 75 65 2d 6f 66 20 73 65  <xsl:value-of se
1b00: 6c 65 63 74 3d 22 24 70 61 72 61 6d 65 74 65 72  lect="$parameter
1b10: 32 22 2f 3e 0a 20 20 3c 2f 78 73 6c 3a 74 65 6d  2"/>.  </xsl:tem
1b20: 70 6c 61 74 65 3e 0a 3c 2f 78 73 6c 3a 73 74 79  plate>.</xsl:sty
1b30: 6c 65 73 68 65 65 74 3e 7d 5d 20 0a 20 20 20 20  lesheet>}] .    
1b40: 73 65 74 20 78 6d 6c 72 6f 6f 74 20 5b 24 78 6d  set xmlroot [$xm
1b50: 6c 20 64 6f 63 75 6d 65 6e 74 45 6c 65 6d 65 6e  l documentElemen
1b60: 74 5d 0a 20 20 20 20 24 78 6d 6c 72 6f 6f 74 20  t].    $xmlroot 
1b70: 78 73 6c 74 20 2d 70 61 72 61 6d 65 74 65 72 73  xslt -parameters
1b80: 20 7b 70 61 72 61 6d 65 74 65 72 31 20 73 74 61   {parameter1 sta
1b90: 72 74 56 61 6c 75 65 31 20 70 61 72 61 6d 65 74  rtValue1 paramet
1ba0: 65 72 32 20 73 74 61 72 74 56 61 6c 75 65 32 7d  er2 startValue2}
1bb0: 20 24 78 73 6c 74 20 72 65 73 75 6c 74 44 6f 63   $xslt resultDoc
1bc0: 0a 20 20 20 20 73 65 74 20 72 65 73 75 6c 74 72  .    set resultr
1bd0: 6f 6f 74 20 5b 24 72 65 73 75 6c 74 44 6f 63 20  oot [$resultDoc 
1be0: 64 6f 63 75 6d 65 6e 74 45 6c 65 6d 65 6e 74 5d  documentElement]
1bf0: 0a 20 20 20 20 73 65 74 20 72 65 73 75 6c 74 20  .    set result 
1c00: 5b 24 72 65 73 75 6c 74 72 6f 6f 74 20 61 73 58  [$resultroot asX
1c10: 4d 4c 5d 0a 20 20 20 20 24 78 6d 6c 20 64 65 6c  ML].    $xml del
1c20: 65 74 65 0a 20 20 20 20 24 78 73 6c 74 20 64 65  ete.    $xslt de
1c30: 6c 65 74 65 0a 20 20 20 20 24 72 65 73 75 6c 74  lete.    $result
1c40: 44 6f 63 20 64 65 6c 65 74 65 0a 20 20 20 20 73  Doc delete.    s
1c50: 65 74 20 72 65 73 75 6c 74 0a 7d 20 7b 73 74 61  et result.} {sta
1c60: 72 74 56 61 6c 75 65 31 20 73 74 61 72 74 56 61  rtValue1 startVa
1c70: 6c 75 65 32 7d 0a 0a 74 65 73 74 20 78 73 6c 74  lue2}..test xslt
1c80: 2d 32 2e 35 20 7b 78 73 6c 74 20 74 6f 70 20 6c  -2.5 {xslt top l
1c90: 65 76 65 6c 20 70 61 72 61 6d 65 74 65 72 3a 20  evel parameter: 
1ca0: 74 72 79 20 74 6f 20 73 65 74 20 6e 6f 6e 65 78  try to set nonex
1cb0: 69 73 74 65 64 20 70 61 72 61 6d 7d 20 7b 0a 20  isted param} {. 
1cc0: 20 20 20 73 65 74 20 78 6d 6c 20 5b 64 6f 6d 20     set xml [dom 
1cd0: 70 61 72 73 65 20 2d 6b 65 65 70 45 6d 70 74 69  parse -keepEmpti
1ce0: 65 73 20 7b 3c 72 6f 6f 74 2f 3e 7d 5d 0a 20 20  es {<root/>}].  
1cf0: 20 20 73 65 74 20 78 73 6c 74 20 5b 64 6f 6d 20    set xslt [dom 
1d00: 70 61 72 73 65 20 2d 6b 65 65 70 45 6d 70 74 69  parse -keepEmpti
1d10: 65 73 20 7b 3c 78 73 6c 3a 73 74 79 6c 65 73 68  es {<xsl:stylesh
1d20: 65 65 74 20 0a 20 20 78 6d 6c 6e 73 3a 78 73 6c  eet .  xmlns:xsl
1d30: 3d 22 68 74 74 70 3a 2f 2f 77 77 77 2e 77 33 2e  ="http://www.w3.
1d40: 6f 72 67 2f 31 39 39 39 2f 58 53 4c 2f 54 72 61  org/1999/XSL/Tra
1d50: 6e 73 66 6f 72 6d 22 0a 20 20 76 65 72 73 69 6f  nsform".  versio
1d60: 6e 3d 22 31 2e 30 22 3e 0a 20 20 3c 78 73 6c 3a  n="1.0">.  <xsl:
1d70: 70 61 72 61 6d 20 6e 61 6d 65 3d 22 70 61 72 61  param name="para
1d80: 6d 65 74 65 72 31 22 20 73 65 6c 65 63 74 3d 22  meter1" select="
1d90: 27 70 61 72 61 6d 65 74 65 72 31 56 61 6c 75 65  'parameter1Value
1da0: 27 22 2f 3e 0a 20 20 3c 78 73 6c 3a 70 61 72 61  '"/>.  <xsl:para
1db0: 6d 20 6e 61 6d 65 3d 22 70 61 72 61 6d 65 74 65  m name="paramete
1dc0: 72 32 22 20 73 65 6c 65 63 74 3d 22 27 70 61 72  r2" select="'par
1dd0: 61 6d 65 74 65 72 32 56 61 6c 75 65 27 22 2f 3e  ameter2Value'"/>
1de0: 0a 20 20 3c 78 73 6c 3a 74 65 6d 70 6c 61 74 65  .  <xsl:template
1df0: 20 6d 61 74 63 68 3d 22 2f 22 3e 0a 20 20 20 20   match="/">.    
1e00: 3c 78 73 6c 3a 76 61 6c 75 65 2d 6f 66 20 73 65  <xsl:value-of se
1e10: 6c 65 63 74 3d 22 24 70 61 72 61 6d 65 74 65 72  lect="$parameter
1e20: 31 22 2f 3e 0a 20 20 20 20 3c 78 73 6c 3a 74 65  1"/>.    <xsl:te
1e30: 78 74 3e 20 3c 2f 78 73 6c 3a 74 65 78 74 3e 0a  xt> </xsl:text>.
1e40: 20 20 20 20 3c 78 73 6c 3a 76 61 6c 75 65 2d 6f      <xsl:value-o
1e50: 66 20 73 65 6c 65 63 74 3d 22 24 70 61 72 61 6d  f select="$param
1e60: 65 74 65 72 32 22 2f 3e 0a 20 20 3c 2f 78 73 6c  eter2"/>.  </xsl
1e70: 3a 74 65 6d 70 6c 61 74 65 3e 0a 3c 2f 78 73 6c  :template>.</xsl
1e80: 3a 73 74 79 6c 65 73 68 65 65 74 3e 7d 5d 20 0a  :stylesheet>}] .
1e90: 20 20 20 20 73 65 74 20 78 6d 6c 72 6f 6f 74 20      set xmlroot 
1ea0: 5b 24 78 6d 6c 20 64 6f 63 75 6d 65 6e 74 45 6c  [$xml documentEl
1eb0: 65 6d 65 6e 74 5d 0a 20 20 20 20 63 61 74 63 68  ement].    catch
1ec0: 20 7b 24 78 6d 6c 72 6f 6f 74 20 78 73 6c 74 20   {$xmlroot xslt 
1ed0: 2d 70 61 72 61 6d 65 74 65 72 73 20 7b 6e 6f 6e  -parameters {non
1ee0: 45 78 69 73 74 65 6e 64 20 66 6f 6f 7d 20 24 78  Existend foo} $x
1ef0: 73 6c 74 20 72 65 73 75 6c 74 44 6f 63 7d 20 65  slt resultDoc} e
1f00: 72 72 4d 73 67 0a 20 20 20 20 24 78 6d 6c 20 64  rrMsg.    $xml d
1f10: 65 6c 65 74 65 0a 20 20 20 20 24 78 73 6c 74 20  elete.    $xslt 
1f20: 64 65 6c 65 74 65 0a 20 20 20 20 73 65 74 20 65  delete.    set e
1f30: 72 72 4d 73 67 0a 7d 20 7b 54 68 65 72 65 20 69  rrMsg.} {There i
1f40: 73 6e 27 74 20 61 20 70 61 72 61 6d 65 74 65 72  sn't a parameter
1f50: 20 6e 61 6d 65 64 20 22 6e 6f 6e 45 78 69 73 74   named "nonExist
1f60: 65 6e 64 22 20 64 65 66 69 6e 65 64 20 61 74 20  end" defined at 
1f70: 74 6f 70 20 6c 65 76 65 6c 20 69 6e 20 74 68 65  top level in the
1f80: 20 73 74 79 6c 65 73 68 65 65 74 2e 7d 0a 0a 74   stylesheet.}..t
1f90: 65 73 74 20 78 73 6c 74 2d 32 2e 36 20 7b 78 73  est xslt-2.6 {xs
1fa0: 6c 74 20 74 6f 70 20 6c 65 76 65 6c 20 70 61 72  lt top level par
1fb0: 61 6d 65 74 65 72 3a 20 74 72 79 20 74 6f 20 73  ameter: try to s
1fc0: 65 74 20 76 61 72 69 61 62 6c 65 7d 20 7b 0a 20  et variable} {. 
1fd0: 20 20 20 73 65 74 20 78 6d 6c 20 5b 64 6f 6d 20     set xml [dom 
1fe0: 70 61 72 73 65 20 2d 6b 65 65 70 45 6d 70 74 69  parse -keepEmpti
1ff0: 65 73 20 7b 3c 72 6f 6f 74 2f 3e 7d 5d 0a 20 20  es {<root/>}].  
2000: 20 20 73 65 74 20 78 73 6c 74 20 5b 64 6f 6d 20    set xslt [dom 
2010: 70 61 72 73 65 20 2d 6b 65 65 70 45 6d 70 74 69  parse -keepEmpti
2020: 65 73 20 7b 3c 78 73 6c 3a 73 74 79 6c 65 73 68  es {<xsl:stylesh
2030: 65 65 74 20 0a 20 20 78 6d 6c 6e 73 3a 78 73 6c  eet .  xmlns:xsl
2040: 3d 22 68 74 74 70 3a 2f 2f 77 77 77 2e 77 33 2e  ="http://www.w3.
2050: 6f 72 67 2f 31 39 39 39 2f 58 53 4c 2f 54 72 61  org/1999/XSL/Tra
2060: 6e 73 66 6f 72 6d 22 0a 20 20 76 65 72 73 69 6f  nsform".  versio
2070: 6e 3d 22 31 2e 30 22 3e 0a 20 20 3c 78 73 6c 3a  n="1.0">.  <xsl:
2080: 76 61 72 69 61 62 6c 65 20 6e 61 6d 65 3d 22 76  variable name="v
2090: 61 72 69 61 62 6c 65 31 22 20 73 65 6c 65 63 74  ariable1" select
20a0: 3d 22 27 76 61 72 69 61 62 6c 65 31 56 61 6c 75  ="'variable1Valu
20b0: 65 27 22 2f 3e 0a 20 20 3c 78 73 6c 3a 70 61 72  e'"/>.  <xsl:par
20c0: 61 6d 20 6e 61 6d 65 3d 22 70 61 72 61 6d 65 74  am name="paramet
20d0: 65 72 32 22 20 73 65 6c 65 63 74 3d 22 27 70 61  er2" select="'pa
20e0: 72 61 6d 65 74 65 72 32 56 61 6c 75 65 27 22 2f  rameter2Value'"/
20f0: 3e 0a 20 20 3c 78 73 6c 3a 74 65 6d 70 6c 61 74  >.  <xsl:templat
2100: 65 20 6d 61 74 63 68 3d 22 2f 22 3e 0a 20 20 20  e match="/">.   
2110: 20 3c 78 73 6c 3a 76 61 6c 75 65 2d 6f 66 20 73   <xsl:value-of s
2120: 65 6c 65 63 74 3d 22 24 76 61 72 69 61 62 6c 65  elect="$variable
2130: 31 22 2f 3e 0a 20 20 20 20 3c 78 73 6c 3a 74 65  1"/>.    <xsl:te
2140: 78 74 3e 20 3c 2f 78 73 6c 3a 74 65 78 74 3e 0a  xt> </xsl:text>.
2150: 20 20 20 20 3c 78 73 6c 3a 76 61 6c 75 65 2d 6f      <xsl:value-o
2160: 66 20 73 65 6c 65 63 74 3d 22 24 70 61 72 61 6d  f select="$param
2170: 65 74 65 72 32 22 2f 3e 0a 20 20 3c 2f 78 73 6c  eter2"/>.  </xsl
2180: 3a 74 65 6d 70 6c 61 74 65 3e 0a 3c 2f 78 73 6c  :template>.</xsl
2190: 3a 73 74 79 6c 65 73 68 65 65 74 3e 7d 5d 20 0a  :stylesheet>}] .
21a0: 20 20 20 20 73 65 74 20 78 6d 6c 72 6f 6f 74 20      set xmlroot 
21b0: 5b 24 78 6d 6c 20 64 6f 63 75 6d 65 6e 74 45 6c  [$xml documentEl
21c0: 65 6d 65 6e 74 5d 0a 20 20 20 20 63 61 74 63 68  ement].    catch
21d0: 20 7b 24 78 6d 6c 72 6f 6f 74 20 78 73 6c 74 20   {$xmlroot xslt 
21e0: 2d 70 61 72 61 6d 65 74 65 72 73 20 7b 76 61 72  -parameters {var
21f0: 69 61 62 6c 65 31 20 66 6f 6f 7d 20 24 78 73 6c  iable1 foo} $xsl
2200: 74 20 72 65 73 75 6c 74 44 6f 63 7d 20 65 72 72  t resultDoc} err
2210: 4d 73 67 0a 20 20 20 20 24 78 6d 6c 20 64 65 6c  Msg.    $xml del
2220: 65 74 65 0a 20 20 20 20 24 78 73 6c 74 20 64 65  ete.    $xslt de
2230: 6c 65 74 65 0a 20 20 20 20 73 65 74 20 65 72 72  lete.    set err
2240: 4d 73 67 0a 7d 20 7b 22 76 61 72 69 61 62 6c 65  Msg.} {"variable
2250: 31 22 20 69 73 20 64 65 66 69 6e 65 64 20 61 73  1" is defined as
2260: 20 76 61 72 69 61 62 6c 65 2c 20 6e 6f 74 20 61   variable, not a
2270: 73 20 70 61 72 61 6d 65 74 65 72 2e 7d 0a 0a 74  s parameter.}..t
2280: 65 73 74 20 78 73 6c 74 2d 32 2e 37 20 7b 78 73  est xslt-2.7 {xs
2290: 6c 74 20 74 6f 70 20 6c 65 76 65 6c 20 70 61 72  lt top level par
22a0: 61 6d 65 74 65 72 7d 20 7b 0a 20 20 20 20 73 65  ameter} {.    se
22b0: 74 20 78 6d 6c 20 5b 64 6f 6d 20 70 61 72 73 65  t xml [dom parse
22c0: 20 2d 6b 65 65 70 45 6d 70 74 69 65 73 20 7b 3c   -keepEmpties {<
22d0: 72 6f 6f 74 2f 3e 7d 5d 0a 20 20 20 20 73 65 74  root/>}].    set
22e0: 20 78 73 6c 74 20 5b 64 6f 6d 20 70 61 72 73 65   xslt [dom parse
22f0: 20 2d 6b 65 65 70 45 6d 70 74 69 65 73 20 7b 3c   -keepEmpties {<
2300: 78 73 6c 3a 73 74 79 6c 65 73 68 65 65 74 20 0a  xsl:stylesheet .
2310: 20 20 78 6d 6c 6e 73 3a 78 73 6c 3d 22 68 74 74    xmlns:xsl="htt
2320: 70 3a 2f 2f 77 77 77 2e 77 33 2e 6f 72 67 2f 31  p://www.w3.org/1
2330: 39 39 39 2f 58 53 4c 2f 54 72 61 6e 73 66 6f 72  999/XSL/Transfor
2340: 6d 22 0a 20 20 76 65 72 73 69 6f 6e 3d 22 31 2e  m".  version="1.
2350: 30 22 3e 0a 20 20 3c 78 73 6c 3a 76 61 72 69 61  0">.  <xsl:varia
2360: 62 6c 65 20 6e 61 6d 65 3d 22 76 61 72 69 61 62  ble name="variab
2370: 6c 65 31 22 20 73 65 6c 65 63 74 3d 22 27 76 61  le1" select="'va
2380: 72 69 61 62 6c 65 31 56 61 6c 75 65 27 22 2f 3e  riable1Value'"/>
2390: 0a 20 20 3c 78 73 6c 3a 70 61 72 61 6d 20 6e 61  .  <xsl:param na
23a0: 6d 65 3d 22 70 61 72 61 6d 65 74 65 72 32 22 20  me="parameter2" 
23b0: 73 65 6c 65 63 74 3d 22 27 70 61 72 61 6d 65 74  select="'paramet
23c0: 65 72 32 56 61 6c 75 65 27 22 2f 3e 0a 20 20 3c  er2Value'"/>.  <
23d0: 78 73 6c 3a 74 65 6d 70 6c 61 74 65 20 6d 61 74  xsl:template mat
23e0: 63 68 3d 22 2f 22 3e 0a 20 20 20 20 3c 78 73 6c  ch="/">.    <xsl
23f0: 3a 76 61 6c 75 65 2d 6f 66 20 73 65 6c 65 63 74  :value-of select
2400: 3d 22 24 76 61 72 69 61 62 6c 65 31 22 2f 3e 0a  ="$variable1"/>.
2410: 20 20 20 20 3c 78 73 6c 3a 74 65 78 74 3e 20 3c      <xsl:text> <
2420: 2f 78 73 6c 3a 74 65 78 74 3e 0a 20 20 20 20 3c  /xsl:text>.    <
2430: 78 73 6c 3a 76 61 6c 75 65 2d 6f 66 20 73 65 6c  xsl:value-of sel
2440: 65 63 74 3d 22 24 70 61 72 61 6d 65 74 65 72 32  ect="$parameter2
2450: 22 2f 3e 0a 20 20 3c 2f 78 73 6c 3a 74 65 6d 70  "/>.  </xsl:temp
2460: 6c 61 74 65 3e 0a 3c 2f 78 73 6c 3a 73 74 79 6c  late>.</xsl:styl
2470: 65 73 68 65 65 74 3e 7d 5d 20 0a 20 20 20 20 73  esheet>}] .    s
2480: 65 74 20 78 6d 6c 72 6f 6f 74 20 5b 24 78 6d 6c  et xmlroot [$xml
2490: 20 64 6f 63 75 6d 65 6e 74 45 6c 65 6d 65 6e 74   documentElement
24a0: 5d 0a 20 20 20 20 63 61 74 63 68 20 7b 24 78 6d  ].    catch {$xm
24b0: 6c 72 6f 6f 74 20 78 73 6c 74 20 2d 70 61 72 61  lroot xslt -para
24c0: 6d 65 74 65 72 73 20 7b 70 61 72 61 6d 65 74 65  meters {paramete
24d0: 72 32 20 66 6f 6f 7d 20 24 78 73 6c 74 20 72 65  r2 foo} $xslt re
24e0: 73 75 6c 74 44 6f 63 7d 20 65 72 72 4d 73 67 0a  sultDoc} errMsg.
24f0: 20 20 20 20 73 65 74 20 72 65 73 75 6c 74 72 6f      set resultro
2500: 6f 74 20 5b 24 72 65 73 75 6c 74 44 6f 63 20 64  ot [$resultDoc d
2510: 6f 63 75 6d 65 6e 74 45 6c 65 6d 65 6e 74 5d 0a  ocumentElement].
2520: 20 20 20 20 73 65 74 20 72 65 73 75 6c 74 20 5b      set result [
2530: 24 72 65 73 75 6c 74 72 6f 6f 74 20 61 73 58 4d  $resultroot asXM
2540: 4c 5d 0a 20 20 20 20 24 78 6d 6c 20 64 65 6c 65  L].    $xml dele
2550: 74 65 0a 20 20 20 20 24 78 73 6c 74 20 64 65 6c  te.    $xslt del
2560: 65 74 65 0a 20 20 20 20 24 72 65 73 75 6c 74 44  ete.    $resultD
2570: 6f 63 20 64 65 6c 65 74 65 0a 20 20 20 20 73 65  oc delete.    se
2580: 74 20 72 65 73 75 6c 74 0a 7d 20 7b 76 61 72 69  t result.} {vari
2590: 61 62 6c 65 31 56 61 6c 75 65 20 66 6f 6f 7d 0a  able1Value foo}.
25a0: 0a 74 65 73 74 20 78 73 6c 74 2d 32 2e 38 20 7b  .test xslt-2.8 {
25b0: 78 73 6c 74 20 74 6f 70 20 6c 65 76 65 6c 20 70  xslt top level p
25c0: 61 72 61 6d 65 74 65 72 3a 20 77 72 6f 6e 67 20  arameter: wrong 
25d0: 75 73 61 67 65 20 6f 66 20 2d 70 61 72 61 6d 65  usage of -parame
25e0: 74 65 72 73 20 6f 70 74 69 6f 6e 7d 20 7b 0a 20  ters option} {. 
25f0: 20 20 20 73 65 74 20 78 6d 6c 20 5b 64 6f 6d 20     set xml [dom 
2600: 70 61 72 73 65 20 7b 3c 72 6f 6f 74 2f 3e 7d 5d  parse {<root/>}]
2610: 0a 20 20 20 20 73 65 74 20 78 73 6c 74 20 5b 64  .    set xslt [d
2620: 6f 6d 20 70 61 72 73 65 20 7b 3c 78 73 6c 3a 73  om parse {<xsl:s
2630: 74 79 6c 65 73 68 65 65 74 20 0a 20 20 78 6d 6c  tylesheet .  xml
2640: 6e 73 3a 78 73 6c 3d 22 68 74 74 70 3a 2f 2f 77  ns:xsl="http://w
2650: 77 77 2e 77 33 2e 6f 72 67 2f 31 39 39 39 2f 58  ww.w3.org/1999/X
2660: 53 4c 2f 54 72 61 6e 73 66 6f 72 6d 22 0a 20 20  SL/Transform".  
2670: 76 65 72 73 69 6f 6e 3d 22 31 2e 30 22 3e 0a 20  version="1.0">. 
2680: 20 3c 78 73 6c 3a 70 61 72 61 6d 20 6e 61 6d 65   <xsl:param name
2690: 3d 22 70 61 72 61 6d 65 74 65 72 31 22 20 73 65  ="parameter1" se
26a0: 6c 65 63 74 3d 22 27 70 61 72 61 6d 65 74 65 72  lect="'parameter
26b0: 31 56 61 6c 75 65 27 22 2f 3e 0a 20 20 3c 78 73  1Value'"/>.  <xs
26c0: 6c 3a 74 65 6d 70 6c 61 74 65 20 6d 61 74 63 68  l:template match
26d0: 3d 22 2f 22 3e 0a 20 20 20 20 3c 78 73 6c 3a 76  ="/">.    <xsl:v
26e0: 61 6c 75 65 2d 6f 66 20 73 65 6c 65 63 74 3d 22  alue-of select="
26f0: 24 70 61 72 61 6d 65 74 65 72 31 22 2f 3e 0a 20  $parameter1"/>. 
2700: 20 3c 2f 78 73 6c 3a 74 65 6d 70 6c 61 74 65 3e   </xsl:template>
2710: 0a 3c 2f 78 73 6c 3a 73 74 79 6c 65 73 68 65 65  .</xsl:styleshee
2720: 74 3e 7d 5d 20 0a 20 20 20 20 73 65 74 20 78 6d  t>}] .    set xm
2730: 6c 72 6f 6f 74 20 5b 24 78 6d 6c 20 64 6f 63 75  lroot [$xml docu
2740: 6d 65 6e 74 45 6c 65 6d 65 6e 74 5d 0a 20 20 20  mentElement].   
2750: 20 63 61 74 63 68 20 7b 24 78 6d 6c 72 6f 6f 74   catch {$xmlroot
2760: 20 78 73 6c 74 20 2d 70 61 72 61 6d 65 74 65 72   xslt -parameter
2770: 73 20 24 78 73 6c 74 20 72 65 73 75 6c 74 44 6f  s $xslt resultDo
2780: 63 7d 20 65 72 72 4d 73 67 0a 20 20 20 20 24 78  c} errMsg.    $x
2790: 6d 6c 20 64 65 6c 65 74 65 0a 20 20 20 20 24 78  ml delete.    $x
27a0: 73 6c 74 20 64 65 6c 65 74 65 0a 20 20 20 20 73  slt delete.    s
27b0: 65 74 20 65 72 72 4d 73 67 0a 7d 20 7b 70 61 72  et errMsg.} {par
27c0: 61 6d 65 74 65 72 20 76 61 6c 75 65 20 6d 69 73  ameter value mis
27d0: 73 69 6e 67 3a 20 74 68 65 20 2d 70 61 72 61 6d  sing: the -param
27e0: 65 74 65 72 73 20 6f 70 74 69 6f 6e 20 6e 65 65  eters option nee
27f0: 64 73 20 61 20 6c 69 73 74 20 6f 66 20 70 61 72  ds a list of par
2800: 61 6d 65 74 65 72 20 6e 61 6d 65 20 61 6e 64 20  ameter name and 
2810: 70 61 72 61 6d 65 74 65 72 20 76 61 6c 75 65 20  parameter value 
2820: 70 61 69 72 73 7d 0a 0a 74 65 73 74 20 78 73 6c  pairs}..test xsl
2830: 74 2d 32 2e 39 20 7b 78 73 6c 74 20 74 6f 70 20  t-2.9 {xslt top 
2840: 6c 65 76 65 6c 20 70 61 72 61 6d 65 74 65 72 3a  level parameter:
2850: 20 77 72 6f 6e 67 20 75 73 61 67 65 20 6f 66 20   wrong usage of 
2860: 2d 70 61 72 61 6d 65 74 65 72 73 20 6f 70 74 69  -parameters opti
2870: 6f 6e 7d 20 7b 0a 20 20 20 20 73 65 74 20 78 6d  on} {.    set xm
2880: 6c 20 5b 64 6f 6d 20 70 61 72 73 65 20 7b 3c 72  l [dom parse {<r
2890: 6f 6f 74 2f 3e 7d 5d 0a 20 20 20 20 73 65 74 20  oot/>}].    set 
28a0: 78 73 6c 74 20 5b 64 6f 6d 20 70 61 72 73 65 20  xslt [dom parse 
28b0: 7b 3c 78 73 6c 3a 73 74 79 6c 65 73 68 65 65 74  {<xsl:stylesheet
28c0: 20 0a 20 20 78 6d 6c 6e 73 3a 78 73 6c 3d 22 68   .  xmlns:xsl="h
28d0: 74 74 70 3a 2f 2f 77 77 77 2e 77 33 2e 6f 72 67  ttp://www.w3.org
28e0: 2f 31 39 39 39 2f 58 53 4c 2f 54 72 61 6e 73 66  /1999/XSL/Transf
28f0: 6f 72 6d 22 0a 20 20 76 65 72 73 69 6f 6e 3d 22  orm".  version="
2900: 31 2e 30 22 3e 0a 20 20 3c 78 73 6c 3a 70 61 72  1.0">.  <xsl:par
2910: 61 6d 20 6e 61 6d 65 3d 22 70 61 72 61 6d 65 74  am name="paramet
2920: 65 72 31 22 20 73 65 6c 65 63 74 3d 22 27 70 61  er1" select="'pa
2930: 72 61 6d 65 74 65 72 31 56 61 6c 75 65 27 22 2f  rameter1Value'"/
2940: 3e 0a 20 20 3c 78 73 6c 3a 74 65 6d 70 6c 61 74  >.  <xsl:templat
2950: 65 20 6d 61 74 63 68 3d 22 2f 22 3e 0a 20 20 20  e match="/">.   
2960: 20 3c 78 73 6c 3a 76 61 6c 75 65 2d 6f 66 20 73   <xsl:value-of s
2970: 65 6c 65 63 74 3d 22 24 70 61 72 61 6d 65 74 65  elect="$paramete
2980: 72 31 22 2f 3e 0a 20 20 3c 2f 78 73 6c 3a 74 65  r1"/>.  </xsl:te
2990: 6d 70 6c 61 74 65 3e 0a 3c 2f 78 73 6c 3a 73 74  mplate>.</xsl:st
29a0: 79 6c 65 73 68 65 65 74 3e 7d 5d 20 0a 20 20 20  ylesheet>}] .   
29b0: 20 73 65 74 20 78 6d 6c 72 6f 6f 74 20 5b 24 78   set xmlroot [$x
29c0: 6d 6c 20 64 6f 63 75 6d 65 6e 74 45 6c 65 6d 65  ml documentEleme
29d0: 6e 74 5d 0a 20 20 20 20 63 61 74 63 68 20 7b 24  nt].    catch {$
29e0: 78 6d 6c 72 6f 6f 74 20 78 73 6c 74 20 2d 70 61  xmlroot xslt -pa
29f0: 72 61 6d 65 74 65 72 73 20 7b 66 6f 6f 20 62 61  rameters {foo ba
2a00: 72 20 62 61 7a 7d 20 24 78 73 6c 74 20 72 65 73  r baz} $xslt res
2a10: 75 6c 74 44 6f 63 7d 20 65 72 72 4d 73 67 0a 20  ultDoc} errMsg. 
2a20: 20 20 20 24 78 6d 6c 20 64 65 6c 65 74 65 0a 20     $xml delete. 
2a30: 20 20 20 24 78 73 6c 74 20 64 65 6c 65 74 65 0a     $xslt delete.
2a40: 20 20 20 20 73 65 74 20 65 72 72 4d 73 67 0a 7d      set errMsg.}
2a50: 20 7b 70 61 72 61 6d 65 74 65 72 20 76 61 6c 75   {parameter valu
2a60: 65 20 6d 69 73 73 69 6e 67 3a 20 74 68 65 20 2d  e missing: the -
2a70: 70 61 72 61 6d 65 74 65 72 73 20 6f 70 74 69 6f  parameters optio
2a80: 6e 20 6e 65 65 64 73 20 61 20 6c 69 73 74 20 6f  n needs a list o
2a90: 66 20 70 61 72 61 6d 65 74 65 72 20 6e 61 6d 65  f parameter name
2aa0: 20 61 6e 64 20 70 61 72 61 6d 65 74 65 72 20 76   and parameter v
2ab0: 61 6c 75 65 20 70 61 69 72 73 7d 0a 0a 74 65 73  alue pairs}..tes
2ac0: 74 20 78 73 6c 74 2d 32 2e 31 30 20 7b 6e 6f 20  t xslt-2.10 {no 
2ad0: 72 65 73 75 6c 74 44 6f 63 20 76 61 72 69 61 62  resultDoc variab
2ae0: 6c 65 20 6e 61 6d 65 7d 20 7b 0a 20 20 20 20 73  le name} {.    s
2af0: 65 74 20 78 6d 6c 20 5b 64 6f 6d 20 70 61 72 73  et xml [dom pars
2b00: 65 20 7b 3c 72 6f 6f 74 2f 3e 7d 5d 0a 20 20 20  e {<root/>}].   
2b10: 20 73 65 74 20 78 73 6c 74 20 5b 64 6f 6d 20 70   set xslt [dom p
2b20: 61 72 73 65 20 7b 3c 78 73 6c 3a 73 74 79 6c 65  arse {<xsl:style
2b30: 73 68 65 65 74 20 0a 20 20 78 6d 6c 6e 73 3a 78  sheet .  xmlns:x
2b40: 73 6c 3d 22 68 74 74 70 3a 2f 2f 77 77 77 2e 77  sl="http://www.w
2b50: 33 2e 6f 72 67 2f 31 39 39 39 2f 58 53 4c 2f 54  3.org/1999/XSL/T
2b60: 72 61 6e 73 66 6f 72 6d 22 0a 20 20 76 65 72 73  ransform".  vers
2b70: 69 6f 6e 3d 22 31 2e 30 22 3e 0a 20 20 3c 78 73  ion="1.0">.  <xs
2b80: 6c 3a 70 61 72 61 6d 20 6e 61 6d 65 3d 22 70 61  l:param name="pa
2b90: 72 61 6d 65 74 65 72 31 22 20 73 65 6c 65 63 74  rameter1" select
2ba0: 3d 22 27 70 61 72 61 6d 65 74 65 72 31 56 61 6c  ="'parameter1Val
2bb0: 75 65 27 22 2f 3e 0a 20 20 3c 78 73 6c 3a 74 65  ue'"/>.  <xsl:te
2bc0: 6d 70 6c 61 74 65 20 6d 61 74 63 68 3d 22 2f 22  mplate match="/"
2bd0: 3e 0a 20 20 20 20 3c 78 73 6c 3a 76 61 6c 75 65  >.    <xsl:value
2be0: 2d 6f 66 20 73 65 6c 65 63 74 3d 22 24 70 61 72  -of select="$par
2bf0: 61 6d 65 74 65 72 31 22 2f 3e 0a 20 20 3c 2f 78  ameter1"/>.  </x
2c00: 73 6c 3a 74 65 6d 70 6c 61 74 65 3e 0a 3c 2f 78  sl:template>.</x
2c10: 73 6c 3a 73 74 79 6c 65 73 68 65 65 74 3e 7d 5d  sl:stylesheet>}]
2c20: 20 0a 20 20 20 20 73 65 74 20 78 6d 6c 72 6f 6f   .    set xmlroo
2c30: 74 20 5b 24 78 6d 6c 20 64 6f 63 75 6d 65 6e 74  t [$xml document
2c40: 45 6c 65 6d 65 6e 74 5d 0a 20 20 20 20 73 65 74  Element].    set
2c50: 20 72 65 73 75 6c 74 44 6f 63 20 5b 24 78 6d 6c   resultDoc [$xml
2c60: 72 6f 6f 74 20 78 73 6c 74 20 24 78 73 6c 74 5d  root xslt $xslt]
2c70: 0a 20 20 20 20 73 65 74 20 72 65 73 75 6c 74 72  .    set resultr
2c80: 6f 6f 74 20 5b 24 72 65 73 75 6c 74 44 6f 63 20  oot [$resultDoc 
2c90: 64 6f 63 75 6d 65 6e 74 45 6c 65 6d 65 6e 74 5d  documentElement]
2ca0: 0a 20 20 20 20 73 65 74 20 72 65 73 75 6c 74 20  .    set result 
2cb0: 5b 24 72 65 73 75 6c 74 72 6f 6f 74 20 61 73 58  [$resultroot asX
2cc0: 4d 4c 5d 0a 20 20 20 20 24 78 6d 6c 20 64 65 6c  ML].    $xml del
2cd0: 65 74 65 0a 20 20 20 20 24 78 73 6c 74 20 64 65  ete.    $xslt de
2ce0: 6c 65 74 65 0a 20 20 20 20 24 72 65 73 75 6c 74  lete.    $result
2cf0: 44 6f 63 20 64 65 6c 65 74 65 0a 20 20 20 20 73  Doc delete.    s
2d00: 65 74 20 72 65 73 75 6c 74 0a 7d 20 7b 70 61 72  et result.} {par
2d10: 61 6d 65 74 65 72 31 56 61 6c 75 65 7d 0a 0a 74  ameter1Value}..t
2d20: 65 73 74 20 78 73 6c 74 2d 32 2e 31 31 20 7b 78  est xslt-2.11 {x
2d30: 73 6c 74 20 74 6f 70 20 6c 65 76 65 6c 20 70 61  slt top level pa
2d40: 72 61 6d 65 74 65 72 3a 20 73 65 74 20 77 69 74  rameter: set wit
2d50: 68 20 27 73 74 72 61 6e 67 65 27 20 76 61 6c 75  h 'strange' valu
2d60: 65 7d 20 7b 0a 20 20 20 20 73 65 74 20 78 6d 6c  e} {.    set xml
2d70: 20 5b 64 6f 6d 20 70 61 72 73 65 20 7b 3c 72 6f   [dom parse {<ro
2d80: 6f 74 2f 3e 7d 5d 0a 20 20 20 20 73 65 74 20 78  ot/>}].    set x
2d90: 73 6c 74 20 5b 64 6f 6d 20 70 61 72 73 65 20 7b  slt [dom parse {
2da0: 3c 78 73 6c 3a 73 74 79 6c 65 73 68 65 65 74 20  <xsl:stylesheet 
2db0: 0a 20 20 78 6d 6c 6e 73 3a 78 73 6c 3d 22 68 74  .  xmlns:xsl="ht
2dc0: 74 70 3a 2f 2f 77 77 77 2e 77 33 2e 6f 72 67 2f  tp://www.w3.org/
2dd0: 31 39 39 39 2f 58 53 4c 2f 54 72 61 6e 73 66 6f  1999/XSL/Transfo
2de0: 72 6d 22 0a 20 20 76 65 72 73 69 6f 6e 3d 22 31  rm".  version="1
2df0: 2e 30 22 3e 0a 20 20 3c 78 73 6c 3a 70 61 72 61  .0">.  <xsl:para
2e00: 6d 20 6e 61 6d 65 3d 22 70 61 72 61 6d 65 74 65  m name="paramete
2e10: 72 31 22 20 73 65 6c 65 63 74 3d 22 27 70 61 72  r1" select="'par
2e20: 61 6d 65 74 65 72 31 56 61 6c 75 65 27 22 2f 3e  ameter1Value'"/>
2e30: 0a 20 20 3c 78 73 6c 3a 74 65 6d 70 6c 61 74 65  .  <xsl:template
2e40: 20 6d 61 74 63 68 3d 22 2f 22 3e 0a 20 20 20 20   match="/">.    
2e50: 3c 78 73 6c 3a 76 61 6c 75 65 2d 6f 66 20 73 65  <xsl:value-of se
2e60: 6c 65 63 74 3d 22 24 70 61 72 61 6d 65 74 65 72  lect="$parameter
2e70: 31 22 2f 3e 0a 20 20 3c 2f 78 73 6c 3a 74 65 6d  1"/>.  </xsl:tem
2e80: 70 6c 61 74 65 3e 0a 3c 2f 78 73 6c 3a 73 74 79  plate>.</xsl:sty
2e90: 6c 65 73 68 65 65 74 3e 7d 5d 20 0a 20 20 20 20  lesheet>}] .    
2ea0: 73 65 74 20 78 6d 6c 72 6f 6f 74 20 5b 24 78 6d  set xmlroot [$xm
2eb0: 6c 20 64 6f 63 75 6d 65 6e 74 45 6c 65 6d 65 6e  l documentElemen
2ec0: 74 5d 0a 20 20 20 20 24 78 6d 6c 72 6f 6f 74 20  t].    $xmlroot 
2ed0: 78 73 6c 74 20 2d 70 61 72 61 6d 65 74 65 72 73  xslt -parameters
2ee0: 20 7b 70 61 72 61 6d 65 74 65 72 31 20 66 6f 6f   {parameter1 foo
2ef0: 5c 22 27 3c 3e 62 61 72 7d 20 24 78 73 6c 74 20  \"'<>bar} $xslt 
2f00: 72 65 73 75 6c 74 44 6f 63 0a 20 20 20 20 73 65  resultDoc.    se
2f10: 74 20 72 65 73 75 6c 74 72 6f 6f 74 20 5b 24 72  t resultroot [$r
2f20: 65 73 75 6c 74 44 6f 63 20 64 6f 63 75 6d 65 6e  esultDoc documen
2f30: 74 45 6c 65 6d 65 6e 74 5d 0a 20 20 20 20 73 65  tElement].    se
2f40: 74 20 72 65 73 75 6c 74 20 5b 24 72 65 73 75 6c  t result [$resul
2f50: 74 72 6f 6f 74 20 61 73 58 4d 4c 5d 0a 20 20 20  troot asXML].   
2f60: 20 24 78 6d 6c 20 64 65 6c 65 74 65 0a 20 20 20   $xml delete.   
2f70: 20 24 78 73 6c 74 20 64 65 6c 65 74 65 0a 20 20   $xslt delete.  
2f80: 20 20 24 72 65 73 75 6c 74 44 6f 63 20 64 65 6c    $resultDoc del
2f90: 65 74 65 0a 20 20 20 20 73 65 74 20 72 65 73 75  ete.    set resu
2fa0: 6c 74 0a 7d 20 7b 66 6f 6f 22 27 26 6c 74 3b 26  lt.} {foo"'&lt;&
2fb0: 67 74 3b 62 61 72 7d 0a 0a 23 20 65 6d 61 63 73  gt;bar}..# emacs
2fc0: 3a 20 22 0a 0a 74 65 73 74 20 78 73 6c 74 2d 32  : "..test xslt-2
2fd0: 2e 31 32 20 7b 78 73 6c 74 20 74 6f 70 20 6c 65  .12 {xslt top le
2fe0: 76 65 6c 20 70 61 72 61 6d 65 74 65 72 3a 20 73  vel parameter: s
2ff0: 65 74 20 46 51 20 74 6f 70 2d 6c 65 76 65 6c 20  et FQ top-level 
3000: 70 61 72 61 6d 7d 20 7b 0a 20 20 20 20 73 65 74  param} {.    set
3010: 20 78 6d 6c 20 5b 64 6f 6d 20 70 61 72 73 65 20   xml [dom parse 
3020: 7b 3c 72 6f 6f 74 2f 3e 7d 5d 0a 20 20 20 20 73  {<root/>}].    s
3030: 65 74 20 78 73 6c 74 20 5b 64 6f 6d 20 70 61 72  et xslt [dom par
3040: 73 65 20 7b 3c 78 73 6c 3a 73 74 79 6c 65 73 68  se {<xsl:stylesh
3050: 65 65 74 20 0a 20 20 78 6d 6c 6e 73 3a 78 73 6c  eet .  xmlns:xsl
3060: 3d 22 68 74 74 70 3a 2f 2f 77 77 77 2e 77 33 2e  ="http://www.w3.
3070: 6f 72 67 2f 31 39 39 39 2f 58 53 4c 2f 54 72 61  org/1999/XSL/Tra
3080: 6e 73 66 6f 72 6d 22 0a 20 20 78 6d 6c 6e 73 3a  nsform".  xmlns:
3090: 66 6f 6f 3d 22 62 61 72 22 20 20 0a 20 20 76 65  foo="bar"  .  ve
30a0: 72 73 69 6f 6e 3d 22 31 2e 30 22 3e 0a 20 20 3c  rsion="1.0">.  <
30b0: 78 73 6c 3a 70 61 72 61 6d 20 6e 61 6d 65 3d 22  xsl:param name="
30c0: 66 6f 6f 3a 70 61 72 61 6d 65 74 65 72 31 22 20  foo:parameter1" 
30d0: 73 65 6c 65 63 74 3d 22 27 70 61 72 61 6d 65 74  select="'paramet
30e0: 65 72 31 56 61 6c 75 65 27 22 2f 3e 0a 20 20 3c  er1Value'"/>.  <
30f0: 78 73 6c 3a 74 65 6d 70 6c 61 74 65 20 6d 61 74  xsl:template mat
3100: 63 68 3d 22 2f 22 3e 0a 20 20 20 20 3c 78 73 6c  ch="/">.    <xsl
3110: 3a 76 61 6c 75 65 2d 6f 66 20 73 65 6c 65 63 74  :value-of select
3120: 3d 22 24 66 6f 6f 3a 70 61 72 61 6d 65 74 65 72  ="$foo:parameter
3130: 31 22 2f 3e 0a 20 20 3c 2f 78 73 6c 3a 74 65 6d  1"/>.  </xsl:tem
3140: 70 6c 61 74 65 3e 0a 3c 2f 78 73 6c 3a 73 74 79  plate>.</xsl:sty
3150: 6c 65 73 68 65 65 74 3e 7d 5d 20 0a 20 20 20 20  lesheet>}] .    
3160: 73 65 74 20 78 6d 6c 72 6f 6f 74 20 5b 24 78 6d  set xmlroot [$xm
3170: 6c 20 64 6f 63 75 6d 65 6e 74 45 6c 65 6d 65 6e  l documentElemen
3180: 74 5d 0a 20 20 20 20 24 78 6d 6c 72 6f 6f 74 20  t].    $xmlroot 
3190: 78 73 6c 74 20 2d 70 61 72 61 6d 65 74 65 72 73  xslt -parameters
31a0: 20 7b 66 6f 6f 3a 70 61 72 61 6d 65 74 65 72 31   {foo:parameter1
31b0: 20 73 65 74 56 61 6c 75 65 7d 20 24 78 73 6c 74   setValue} $xslt
31c0: 20 72 65 73 75 6c 74 44 6f 63 0a 20 20 20 20 73   resultDoc.    s
31d0: 65 74 20 72 65 73 75 6c 74 72 6f 6f 74 20 5b 24  et resultroot [$
31e0: 72 65 73 75 6c 74 44 6f 63 20 64 6f 63 75 6d 65  resultDoc docume
31f0: 6e 74 45 6c 65 6d 65 6e 74 5d 0a 20 20 20 20 73  ntElement].    s
3200: 65 74 20 72 65 73 75 6c 74 20 5b 24 72 65 73 75  et result [$resu
3210: 6c 74 72 6f 6f 74 20 61 73 58 4d 4c 5d 0a 20 20  ltroot asXML].  
3220: 20 20 24 78 6d 6c 20 64 65 6c 65 74 65 0a 20 20    $xml delete.  
3230: 20 20 24 78 73 6c 74 20 64 65 6c 65 74 65 0a 20    $xslt delete. 
3240: 20 20 20 24 72 65 73 75 6c 74 44 6f 63 20 64 65     $resultDoc de
3250: 6c 65 74 65 0a 20 20 20 20 73 65 74 20 72 65 73  lete.    set res
3260: 75 6c 74 0a 7d 20 7b 73 65 74 56 61 6c 75 65 7d  ult.} {setValue}
3270: 0a 0a 0a 74 65 73 74 20 78 73 6c 74 2d 32 2e 31  ...test xslt-2.1
3280: 33 20 7b 78 73 6c 74 20 74 6f 70 20 6c 65 76 65  3 {xslt top leve
3290: 6c 20 70 61 72 61 6d 65 74 65 72 3a 20 73 65 74  l parameter: set
32a0: 20 46 51 20 74 6f 70 2d 6c 65 76 65 6c 20 70 61   FQ top-level pa
32b0: 72 61 6d 7d 20 7b 0a 20 20 20 20 73 65 74 20 78  ram} {.    set x
32c0: 6d 6c 20 5b 64 6f 6d 20 70 61 72 73 65 20 7b 3c  ml [dom parse {<
32d0: 72 6f 6f 74 2f 3e 7d 5d 0a 20 20 20 20 73 65 74  root/>}].    set
32e0: 20 78 73 6c 74 20 5b 64 6f 6d 20 70 61 72 73 65   xslt [dom parse
32f0: 20 7b 3c 78 73 6c 3a 73 74 79 6c 65 73 68 65 65   {<xsl:styleshee
3300: 74 20 0a 20 20 78 6d 6c 6e 73 3a 78 73 6c 3d 22  t .  xmlns:xsl="
3310: 68 74 74 70 3a 2f 2f 77 77 77 2e 77 33 2e 6f 72  http://www.w3.or
3320: 67 2f 31 39 39 39 2f 58 53 4c 2f 54 72 61 6e 73  g/1999/XSL/Trans
3330: 66 6f 72 6d 22 0a 20 20 78 6d 6c 6e 73 3a 66 6f  form".  xmlns:fo
3340: 6f 3d 22 62 61 72 22 20 20 0a 20 20 76 65 72 73  o="bar"  .  vers
3350: 69 6f 6e 3d 22 31 2e 30 22 3e 0a 20 20 3c 78 73  ion="1.0">.  <xs
3360: 6c 3a 70 61 72 61 6d 20 6e 61 6d 65 3d 22 62 6f  l:param name="bo
3370: 6f 3a 70 61 72 61 6d 65 74 65 72 31 22 20 73 65  o:parameter1" se
3380: 6c 65 63 74 3d 22 27 70 61 72 61 6d 65 74 65 72  lect="'parameter
3390: 31 56 61 6c 75 65 27 22 20 78 6d 6c 6e 73 3a 62  1Value'" xmlns:b
33a0: 6f 6f 3d 22 62 61 72 22 2f 3e 0a 20 20 3c 78 73  oo="bar"/>.  <xs
33b0: 6c 3a 74 65 6d 70 6c 61 74 65 20 6d 61 74 63 68  l:template match
33c0: 3d 22 2f 22 3e 0a 20 20 20 20 3c 78 73 6c 3a 76  ="/">.    <xsl:v
33d0: 61 6c 75 65 2d 6f 66 20 73 65 6c 65 63 74 3d 22  alue-of select="
33e0: 24 66 6f 6f 3a 70 61 72 61 6d 65 74 65 72 31 22  $foo:parameter1"
33f0: 2f 3e 0a 20 20 3c 2f 78 73 6c 3a 74 65 6d 70 6c  />.  </xsl:templ
3400: 61 74 65 3e 0a 3c 2f 78 73 6c 3a 73 74 79 6c 65  ate>.</xsl:style
3410: 73 68 65 65 74 3e 7d 5d 20 0a 20 20 20 20 73 65  sheet>}] .    se
3420: 74 20 78 6d 6c 72 6f 6f 74 20 5b 24 78 6d 6c 20  t xmlroot [$xml 
3430: 64 6f 63 75 6d 65 6e 74 45 6c 65 6d 65 6e 74 5d  documentElement]
3440: 0a 20 20 20 20 24 78 6d 6c 72 6f 6f 74 20 78 73  .    $xmlroot xs
3450: 6c 74 20 2d 70 61 72 61 6d 65 74 65 72 73 20 7b  lt -parameters {
3460: 66 6f 6f 3a 70 61 72 61 6d 65 74 65 72 31 20 73  foo:parameter1 s
3470: 65 74 56 61 6c 75 65 7d 20 24 78 73 6c 74 20 72  etValue} $xslt r
3480: 65 73 75 6c 74 44 6f 63 0a 20 20 20 20 73 65 74  esultDoc.    set
3490: 20 72 65 73 75 6c 74 72 6f 6f 74 20 5b 24 72 65   resultroot [$re
34a0: 73 75 6c 74 44 6f 63 20 64 6f 63 75 6d 65 6e 74  sultDoc document
34b0: 45 6c 65 6d 65 6e 74 5d 0a 20 20 20 20 73 65 74  Element].    set
34c0: 20 72 65 73 75 6c 74 20 5b 24 72 65 73 75 6c 74   result [$result
34d0: 72 6f 6f 74 20 61 73 58 4d 4c 5d 0a 20 20 20 20  root asXML].    
34e0: 24 78 6d 6c 20 64 65 6c 65 74 65 0a 20 20 20 20  $xml delete.    
34f0: 24 78 73 6c 74 20 64 65 6c 65 74 65 0a 20 20 20  $xslt delete.   
3500: 20 24 72 65 73 75 6c 74 44 6f 63 20 64 65 6c 65   $resultDoc dele
3510: 74 65 0a 20 20 20 20 73 65 74 20 72 65 73 75 6c  te.    set resul
3520: 74 0a 7d 20 7b 73 65 74 56 61 6c 75 65 7d 0a 0a  t.} {setValue}..
3530: 74 65 73 74 20 78 73 6c 74 2d 32 2e 31 34 20 7b  test xslt-2.14 {
3540: 78 73 6c 74 20 74 6f 70 20 6c 65 76 65 6c 20 70  xslt top level p
3550: 61 72 61 6d 65 74 65 72 3a 20 73 65 74 20 46 51  arameter: set FQ
3560: 20 74 6f 70 2d 6c 65 76 65 6c 20 70 61 72 61 6d   top-level param
3570: 7d 20 7b 0a 20 20 20 20 73 65 74 20 78 6d 6c 20  } {.    set xml 
3580: 5b 64 6f 6d 20 70 61 72 73 65 20 7b 3c 72 6f 6f  [dom parse {<roo
3590: 74 2f 3e 7d 5d 0a 20 20 20 20 73 65 74 20 78 73  t/>}].    set xs
35a0: 6c 74 20 5b 64 6f 6d 20 70 61 72 73 65 20 7b 3c  lt [dom parse {<
35b0: 78 73 6c 3a 73 74 79 6c 65 73 68 65 65 74 20 0a  xsl:stylesheet .
35c0: 20 20 78 6d 6c 6e 73 3a 78 73 6c 3d 22 68 74 74    xmlns:xsl="htt
35d0: 70 3a 2f 2f 77 77 77 2e 77 33 2e 6f 72 67 2f 31  p://www.w3.org/1
35e0: 39 39 39 2f 58 53 4c 2f 54 72 61 6e 73 66 6f 72  999/XSL/Transfor
35f0: 6d 22 0a 20 20 78 6d 6c 6e 73 3a 66 6f 6f 3d 22  m".  xmlns:foo="
3600: 62 61 72 22 20 20 0a 20 20 76 65 72 73 69 6f 6e  bar"  .  version
3610: 3d 22 31 2e 30 22 3e 0a 20 20 3c 78 73 6c 3a 70  ="1.0">.  <xsl:p
3620: 61 72 61 6d 20 6e 61 6d 65 3d 22 62 6f 6f 3a 70  aram name="boo:p
3630: 61 72 61 6d 65 74 65 72 31 22 20 73 65 6c 65 63  arameter1" selec
3640: 74 3d 22 27 70 61 72 61 6d 65 74 65 72 31 56 61  t="'parameter1Va
3650: 6c 75 65 27 22 20 78 6d 6c 6e 73 3a 62 6f 6f 3d  lue'" xmlns:boo=
3660: 22 62 61 72 22 2f 3e 0a 20 20 3c 78 73 6c 3a 74  "bar"/>.  <xsl:t
3670: 65 6d 70 6c 61 74 65 20 6d 61 74 63 68 3d 22 2f  emplate match="/
3680: 22 3e 0a 20 20 20 20 3c 78 73 6c 3a 76 61 6c 75  ">.    <xsl:valu
3690: 65 2d 6f 66 20 73 65 6c 65 63 74 3d 22 24 62 6f  e-of select="$bo
36a0: 7a 3a 70 61 72 61 6d 65 74 65 72 31 22 20 78 6d  z:parameter1" xm
36b0: 6c 6e 73 3a 62 6f 7a 3d 22 62 61 72 22 2f 3e 0a  lns:boz="bar"/>.
36c0: 20 20 3c 2f 78 73 6c 3a 74 65 6d 70 6c 61 74 65    </xsl:template
36d0: 3e 0a 3c 2f 78 73 6c 3a 73 74 79 6c 65 73 68 65  >.</xsl:styleshe
36e0: 65 74 3e 7d 5d 20 0a 20 20 20 20 73 65 74 20 78  et>}] .    set x
36f0: 6d 6c 72 6f 6f 74 20 5b 24 78 6d 6c 20 64 6f 63  mlroot [$xml doc
3700: 75 6d 65 6e 74 45 6c 65 6d 65 6e 74 5d 0a 20 20  umentElement].  
3710: 20 20 24 78 6d 6c 72 6f 6f 74 20 78 73 6c 74 20    $xmlroot xslt 
3720: 2d 70 61 72 61 6d 65 74 65 72 73 20 7b 66 6f 6f  -parameters {foo
3730: 3a 70 61 72 61 6d 65 74 65 72 31 20 73 65 74 56  :parameter1 setV
3740: 61 6c 75 65 7d 20 24 78 73 6c 74 20 72 65 73 75  alue} $xslt resu
3750: 6c 74 44 6f 63 0a 20 20 20 20 73 65 74 20 72 65  ltDoc.    set re
3760: 73 75 6c 74 72 6f 6f 74 20 5b 24 72 65 73 75 6c  sultroot [$resul
3770: 74 44 6f 63 20 64 6f 63 75 6d 65 6e 74 45 6c 65  tDoc documentEle
3780: 6d 65 6e 74 5d 0a 20 20 20 20 73 65 74 20 72 65  ment].    set re
3790: 73 75 6c 74 20 5b 24 72 65 73 75 6c 74 72 6f 6f  sult [$resultroo
37a0: 74 20 61 73 58 4d 4c 5d 0a 20 20 20 20 24 78 6d  t asXML].    $xm
37b0: 6c 20 64 65 6c 65 74 65 0a 20 20 20 20 24 78 73  l delete.    $xs
37c0: 6c 74 20 64 65 6c 65 74 65 0a 20 20 20 20 24 72  lt delete.    $r
37d0: 65 73 75 6c 74 44 6f 63 20 64 65 6c 65 74 65 0a  esultDoc delete.
37e0: 20 20 20 20 73 65 74 20 72 65 73 75 6c 74 0a 7d      set result.}
37f0: 20 7b 73 65 74 56 61 6c 75 65 7d 0a 0a 74 65 73   {setValue}..tes
3800: 74 20 78 73 6c 74 2d 32 2e 31 35 20 7b 78 73 6c  t xslt-2.15 {xsl
3810: 74 20 74 6f 70 20 6c 65 76 65 6c 20 70 61 72 61  t top level para
3820: 6d 65 74 65 72 3a 5c 0a 20 20 20 20 20 20 20 20  meter:\.        
3830: 74 72 79 20 74 6f 20 73 65 74 20 6e 6f 6e 65 78  try to set nonex
3840: 69 73 74 65 64 20 70 61 72 61 6d 20 77 69 74 68  isted param with
3850: 20 69 67 6e 6f 72 65 7d 20 7b 0a 20 20 20 20 73   ignore} {.    s
3860: 65 74 20 78 6d 6c 20 5b 64 6f 6d 20 70 61 72 73  et xml [dom pars
3870: 65 20 2d 6b 65 65 70 45 6d 70 74 69 65 73 20 7b  e -keepEmpties {
3880: 3c 72 6f 6f 74 2f 3e 7d 5d 0a 20 20 20 20 73 65  <root/>}].    se
3890: 74 20 78 73 6c 74 20 5b 64 6f 6d 20 70 61 72 73  t xslt [dom pars
38a0: 65 20 2d 6b 65 65 70 45 6d 70 74 69 65 73 20 7b  e -keepEmpties {
38b0: 3c 78 73 6c 3a 73 74 79 6c 65 73 68 65 65 74 20  <xsl:stylesheet 
38c0: 0a 20 20 78 6d 6c 6e 73 3a 78 73 6c 3d 22 68 74  .  xmlns:xsl="ht
38d0: 74 70 3a 2f 2f 77 77 77 2e 77 33 2e 6f 72 67 2f  tp://www.w3.org/
38e0: 31 39 39 39 2f 58 53 4c 2f 54 72 61 6e 73 66 6f  1999/XSL/Transfo
38f0: 72 6d 22 0a 20 20 76 65 72 73 69 6f 6e 3d 22 31  rm".  version="1
3900: 2e 30 22 3e 0a 20 20 3c 78 73 6c 3a 70 61 72 61  .0">.  <xsl:para
3910: 6d 20 6e 61 6d 65 3d 22 70 61 72 61 6d 65 74 65  m name="paramete
3920: 72 31 22 20 73 65 6c 65 63 74 3d 22 27 70 61 72  r1" select="'par
3930: 61 6d 65 74 65 72 31 56 61 6c 75 65 27 22 2f 3e  ameter1Value'"/>
3940: 0a 20 20 3c 78 73 6c 3a 70 61 72 61 6d 20 6e 61  .  <xsl:param na
3950: 6d 65 3d 22 70 61 72 61 6d 65 74 65 72 32 22 20  me="parameter2" 
3960: 73 65 6c 65 63 74 3d 22 27 70 61 72 61 6d 65 74  select="'paramet
3970: 65 72 32 56 61 6c 75 65 27 22 2f 3e 0a 20 20 3c  er2Value'"/>.  <
3980: 78 73 6c 3a 74 65 6d 70 6c 61 74 65 20 6d 61 74  xsl:template mat
3990: 63 68 3d 22 2f 22 3e 0a 20 20 20 20 3c 78 73 6c  ch="/">.    <xsl
39a0: 3a 76 61 6c 75 65 2d 6f 66 20 73 65 6c 65 63 74  :value-of select
39b0: 3d 22 24 70 61 72 61 6d 65 74 65 72 31 22 2f 3e  ="$parameter1"/>
39c0: 0a 20 20 20 20 3c 78 73 6c 3a 74 65 78 74 3e 20  .    <xsl:text> 
39d0: 3c 2f 78 73 6c 3a 74 65 78 74 3e 0a 20 20 20 20  </xsl:text>.    
39e0: 3c 78 73 6c 3a 76 61 6c 75 65 2d 6f 66 20 73 65  <xsl:value-of se
39f0: 6c 65 63 74 3d 22 24 70 61 72 61 6d 65 74 65 72  lect="$parameter
3a00: 32 22 2f 3e 0a 20 20 3c 2f 78 73 6c 3a 74 65 6d  2"/>.  </xsl:tem
3a10: 70 6c 61 74 65 3e 0a 3c 2f 78 73 6c 3a 73 74 79  plate>.</xsl:sty
3a20: 6c 65 73 68 65 65 74 3e 7d 5d 20 0a 20 20 20 20  lesheet>}] .    
3a30: 73 65 74 20 78 6d 6c 72 6f 6f 74 20 5b 24 78 6d  set xmlroot [$xm
3a40: 6c 20 64 6f 63 75 6d 65 6e 74 45 6c 65 6d 65 6e  l documentElemen
3a50: 74 5d 0a 20 20 20 20 73 65 74 20 72 65 73 75 6c  t].    set resul
3a60: 74 20 5b 63 61 74 63 68 20 7b 24 78 6d 6c 72 6f  t [catch {$xmlro
3a70: 6f 74 20 78 73 6c 74 20 2d 69 67 6e 6f 72 65 55  ot xslt -ignoreU
3a80: 6e 64 65 63 6c 61 72 65 64 50 61 72 61 6d 65 74  ndeclaredParamet
3a90: 65 72 73 5c 0a 20 20 20 20 20 20 20 20 20 20 20  ers\.           
3aa0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
3ab0: 20 20 20 20 20 20 20 20 20 20 2d 70 61 72 61 6d            -param
3ac0: 65 74 65 72 73 20 7b 6e 6f 6e 45 78 69 73 74 65  eters {nonExiste
3ad0: 6e 64 20 66 6f 6f 7d 5c 0a 20 20 20 20 20 20 20  nd foo}\.       
3ae0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
3af0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 24 78                $x
3b00: 73 6c 74 20 72 65 73 75 6c 74 44 6f 63 7d 20 65  slt resultDoc} e
3b10: 72 72 4d 73 67 5d 0a 20 20 20 20 24 72 65 73 75  rrMsg].    $resu
3b20: 6c 74 44 6f 63 20 64 65 6c 65 74 65 0a 20 20 20  ltDoc delete.   
3b30: 20 24 78 6d 6c 20 64 65 6c 65 74 65 0a 20 20 20   $xml delete.   
3b40: 20 24 78 73 6c 74 20 64 65 6c 65 74 65 0a 20 20   $xslt delete.  
3b50: 20 20 73 65 74 20 72 65 73 75 6c 74 0a 7d 20 7b    set result.} {
3b60: 30 7d 0a 0a 74 65 73 74 20 78 73 6c 74 2d 32 2e  0}..test xslt-2.
3b70: 31 36 20 7b 78 73 6c 74 20 74 6f 70 20 6c 65 76  16 {xslt top lev
3b80: 65 6c 20 70 61 72 61 6d 65 74 65 72 3a 20 74 72  el parameter: tr
3b90: 79 20 74 6f 20 73 65 74 20 6e 6f 6e 65 78 69 73  y to set nonexis
3ba0: 74 65 64 20 70 61 72 61 6d 20 77 69 74 68 20 69  ted param with i
3bb0: 67 6e 6f 72 65 7d 20 7b 0a 20 20 20 20 73 65 74  gnore} {.    set
3bc0: 20 78 6d 6c 20 5b 64 6f 6d 20 70 61 72 73 65 20   xml [dom parse 
3bd0: 2d 6b 65 65 70 45 6d 70 74 69 65 73 20 7b 3c 72  -keepEmpties {<r
3be0: 6f 6f 74 2f 3e 7d 5d 0a 20 20 20 20 73 65 74 20  oot/>}].    set 
3bf0: 78 73 6c 74 20 5b 64 6f 6d 20 70 61 72 73 65 20  xslt [dom parse 
3c00: 2d 6b 65 65 70 45 6d 70 74 69 65 73 20 7b 3c 78  -keepEmpties {<x
3c10: 73 6c 3a 73 74 79 6c 65 73 68 65 65 74 20 0a 20  sl:stylesheet . 
3c20: 20 78 6d 6c 6e 73 3a 78 73 6c 3d 22 68 74 74 70   xmlns:xsl="http
3c30: 3a 2f 2f 77 77 77 2e 77 33 2e 6f 72 67 2f 31 39  ://www.w3.org/19
3c40: 39 39 2f 58 53 4c 2f 54 72 61 6e 73 66 6f 72 6d  99/XSL/Transform
3c50: 22 0a 20 20 76 65 72 73 69 6f 6e 3d 22 31 2e 30  ".  version="1.0
3c60: 22 3e 0a 20 20 3c 78 73 6c 3a 70 61 72 61 6d 20  ">.  <xsl:param 
3c70: 6e 61 6d 65 3d 22 70 61 72 61 6d 65 74 65 72 31  name="parameter1
3c80: 22 20 73 65 6c 65 63 74 3d 22 27 70 61 72 61 6d  " select="'param
3c90: 65 74 65 72 31 56 61 6c 75 65 27 22 2f 3e 0a 20  eter1Value'"/>. 
3ca0: 20 3c 78 73 6c 3a 70 61 72 61 6d 20 6e 61 6d 65   <xsl:param name
3cb0: 3d 22 70 61 72 61 6d 65 74 65 72 32 22 20 73 65  ="parameter2" se
3cc0: 6c 65 63 74 3d 22 27 70 61 72 61 6d 65 74 65 72  lect="'parameter
3cd0: 32 56 61 6c 75 65 27 22 2f 3e 0a 20 20 3c 78 73  2Value'"/>.  <xs
3ce0: 6c 3a 74 65 6d 70 6c 61 74 65 20 6d 61 74 63 68  l:template match
3cf0: 3d 22 2f 22 3e 0a 20 20 20 20 3c 78 73 6c 3a 76  ="/">.    <xsl:v
3d00: 61 6c 75 65 2d 6f 66 20 73 65 6c 65 63 74 3d 22  alue-of select="
3d10: 24 70 61 72 61 6d 65 74 65 72 31 22 2f 3e 0a 20  $parameter1"/>. 
3d20: 20 20 20 3c 78 73 6c 3a 74 65 78 74 3e 20 3c 2f     <xsl:text> </
3d30: 78 73 6c 3a 74 65 78 74 3e 0a 20 20 20 20 3c 78  xsl:text>.    <x
3d40: 73 6c 3a 76 61 6c 75 65 2d 6f 66 20 73 65 6c 65  sl:value-of sele
3d50: 63 74 3d 22 24 70 61 72 61 6d 65 74 65 72 32 22  ct="$parameter2"
3d60: 2f 3e 0a 20 20 3c 2f 78 73 6c 3a 74 65 6d 70 6c  />.  </xsl:templ
3d70: 61 74 65 3e 0a 3c 2f 78 73 6c 3a 73 74 79 6c 65  ate>.</xsl:style
3d80: 73 68 65 65 74 3e 7d 5d 20 0a 20 20 20 20 73 65  sheet>}] .    se
3d90: 74 20 78 6d 6c 72 6f 6f 74 20 5b 24 78 6d 6c 20  t xmlroot [$xml 
3da0: 64 6f 63 75 6d 65 6e 74 45 6c 65 6d 65 6e 74 5d  documentElement]
3db0: 0a 20 20 20 20 24 78 6d 6c 72 6f 6f 74 20 78 73  .    $xmlroot xs
3dc0: 6c 74 20 2d 69 67 6e 6f 72 65 55 6e 64 65 63 6c  lt -ignoreUndecl
3dd0: 61 72 65 64 50 61 72 61 6d 65 74 65 72 73 20 5c  aredParameters \
3de0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
3df0: 20 20 20 2d 70 61 72 61 6d 65 74 65 72 73 20 7b     -parameters {
3e00: 6e 6f 6e 45 78 69 73 74 65 6e 64 20 66 6f 6f 20  nonExistend foo 
3e10: 70 61 72 61 6d 65 74 65 72 32 20 67 69 76 65 6e  parameter2 given
3e20: 56 61 6c 75 65 7d 20 5c 0a 20 20 20 20 20 20 20  Value} \.       
3e30: 20 20 20 20 20 20 20 20 20 20 20 24 78 73 6c 74             $xslt
3e40: 20 72 65 73 75 6c 74 44 6f 63 0a 20 20 20 20 73   resultDoc.    s
3e50: 65 74 20 72 65 73 75 6c 74 72 6f 6f 74 20 5b 24  et resultroot [$
3e60: 72 65 73 75 6c 74 44 6f 63 20 64 6f 63 75 6d 65  resultDoc docume
3e70: 6e 74 45 6c 65 6d 65 6e 74 5d 0a 20 20 20 20 73  ntElement].    s
3e80: 65 74 20 72 65 73 75 6c 74 20 5b 24 72 65 73 75  et result [$resu
3e90: 6c 74 72 6f 6f 74 20 6e 6f 64 65 56 61 6c 75 65  ltroot nodeValue
3ea0: 5d 0a 20 20 20 20 24 72 65 73 75 6c 74 44 6f 63  ].    $resultDoc
3eb0: 20 64 65 6c 65 74 65 0a 20 20 20 20 24 78 6d 6c   delete.    $xml
3ec0: 20 64 65 6c 65 74 65 0a 20 20 20 20 24 78 73 6c   delete.    $xsl
3ed0: 74 20 64 65 6c 65 74 65 0a 20 20 20 20 73 65 74  t delete.    set
3ee0: 20 72 65 73 75 6c 74 0a 7d 20 7b 70 61 72 61 6d   result.} {param
3ef0: 65 74 65 72 31 56 61 6c 75 65 20 67 69 76 65 6e  eter1Value given
3f00: 56 61 6c 75 65 7d 0a 0a 70 72 6f 63 20 78 73 6c  Value}..proc xsl
3f10: 74 6d 65 73 73 61 67 65 63 6d 64 20 7b 6d 73 67  tmessagecmd {msg
3f20: 20 74 65 72 6d 69 6e 61 74 65 7d 20 7b 0a 20 20   terminate} {.  
3f30: 20 20 67 6c 6f 62 61 6c 20 78 73 6c 74 4d 73 67    global xsltMsg
3f40: 73 0a 20 20 20 20 67 6c 6f 62 61 6c 20 74 65 72  s.    global ter
3f50: 6d 69 6e 61 74 69 6e 67 4d 73 67 0a 0a 20 20 20  minatingMsg..   
3f60: 20 61 70 70 65 6e 64 20 78 73 6c 74 4d 73 67 73   append xsltMsgs
3f70: 20 22 24 6d 73 67 20 74 65 72 6d 69 6e 61 74 65   "$msg terminate
3f80: 3a 20 24 74 65 72 6d 69 6e 61 74 65 20 22 0a 20  : $terminate ". 
3f90: 20 20 20 69 66 20 7b 24 74 65 72 6d 69 6e 61 74     if {$terminat
3fa0: 65 7d 20 7b 0a 20 20 20 20 20 20 20 20 73 65 74  e} {.        set
3fb0: 20 74 65 72 6d 69 6e 61 74 69 6e 67 4d 73 67 20   terminatingMsg 
3fc0: 31 0a 20 20 20 20 7d 20 65 6c 73 65 20 7b 0a 20  1.    } else {. 
3fd0: 20 20 20 20 20 20 20 73 65 74 20 74 65 72 6d 69         set termi
3fe0: 6e 61 74 69 6e 67 4d 73 67 20 30 0a 20 20 20 20  natingMsg 0.    
3ff0: 7d 0a 7d 0a 0a 74 65 73 74 20 78 73 6c 74 2d 32  }.}..test xslt-2
4000: 2e 31 37 20 7b 78 73 6c 74 20 2d 20 74 6f 20 6c  .17 {xslt - to l
4010: 65 73 73 20 61 72 67 75 6d 65 6e 74 73 20 74 6f  ess arguments to
4020: 20 74 68 65 20 6d 65 74 68 6f 64 7d 20 7b 0a 20   the method} {. 
4030: 20 20 20 73 65 74 20 78 6d 6c 20 5b 64 6f 6d 20     set xml [dom 
4040: 70 61 72 73 65 20 7b 3c 72 6f 6f 74 2f 3e 7d 5d  parse {<root/>}]
4050: 0a 20 20 20 20 73 65 74 20 72 65 73 75 6c 74 20  .    set result 
4060: 5b 63 61 74 63 68 20 7b 24 78 6d 6c 20 78 73 6c  [catch {$xml xsl
4070: 74 7d 5d 0a 20 20 20 20 24 78 6d 6c 20 64 65 6c  t}].    $xml del
4080: 65 74 65 0a 20 20 20 20 73 65 74 20 72 65 73 75  ete.    set resu
4090: 6c 74 0a 7d 20 7b 31 7d 0a 0a 74 65 73 74 20 78  lt.} {1}..test x
40a0: 73 6c 74 2d 32 2e 31 38 20 7b 78 73 6c 74 20 2d  slt-2.18 {xslt -
40b0: 78 73 6c 74 6d 65 73 73 61 67 65 63 6d 64 7d 20  xsltmessagecmd} 
40c0: 7b 0a 20 20 20 20 73 65 74 20 78 6d 6c 20 5b 64  {.    set xml [d
40d0: 6f 6d 20 70 61 72 73 65 20 2d 6b 65 65 70 45 6d  om parse -keepEm
40e0: 70 74 69 65 73 20 7b 3c 72 6f 6f 74 2f 3e 7d 5d  pties {<root/>}]
40f0: 0a 20 20 20 20 73 65 74 20 78 73 6c 74 20 5b 64  .    set xslt [d
4100: 6f 6d 20 70 61 72 73 65 20 2d 6b 65 65 70 45 6d  om parse -keepEm
4110: 70 74 69 65 73 20 7b 3c 78 73 6c 3a 73 74 79 6c  pties {<xsl:styl
4120: 65 73 68 65 65 74 20 0a 20 20 78 6d 6c 6e 73 3a  esheet .  xmlns:
4130: 78 73 6c 3d 22 68 74 74 70 3a 2f 2f 77 77 77 2e  xsl="http://www.
4140: 77 33 2e 6f 72 67 2f 31 39 39 39 2f 58 53 4c 2f  w3.org/1999/XSL/
4150: 54 72 61 6e 73 66 6f 72 6d 22 0a 20 20 76 65 72  Transform".  ver
4160: 73 69 6f 6e 3d 22 31 2e 30 22 3e 0a 20 20 3c 78  sion="1.0">.  <x
4170: 73 6c 3a 74 65 6d 70 6c 61 74 65 20 6d 61 74 63  sl:template matc
4180: 68 3d 22 2f 22 3e 0a 20 20 20 20 3c 78 73 6c 3a  h="/">.    <xsl:
4190: 74 65 78 74 3e 73 6f 6d 65 20 74 65 78 74 3c 2f  text>some text</
41a0: 78 73 6c 3a 74 65 78 74 3e 0a 20 20 20 20 3c 78  xsl:text>.    <x
41b0: 73 6c 3a 6d 65 73 73 61 67 65 3e 31 2e 20 63 61  sl:message>1. ca
41c0: 6c 6c 3c 2f 78 73 6c 3a 6d 65 73 73 61 67 65 3e  ll</xsl:message>
41d0: 0a 20 20 20 20 3c 78 73 6c 3a 6d 65 73 73 61 67  .    <xsl:messag
41e0: 65 20 74 65 72 6d 69 6e 61 74 65 3d 22 6e 6f 22  e terminate="no"
41f0: 3e 32 2e 20 63 61 6c 6c 3c 2f 78 73 6c 3a 6d 65  >2. call</xsl:me
4200: 73 73 61 67 65 3e 0a 20 20 20 20 3c 78 73 6c 3a  ssage>.    <xsl:
4210: 6d 65 73 73 61 67 65 3e 33 2e 20 63 61 6c 6c 3c  message>3. call<
4220: 2f 78 73 6c 3a 6d 65 73 73 61 67 65 3e 0a 20 20  /xsl:message>.  
4230: 3c 2f 78 73 6c 3a 74 65 6d 70 6c 61 74 65 3e 0a  </xsl:template>.
4240: 3c 2f 78 73 6c 3a 73 74 79 6c 65 73 68 65 65 74  </xsl:stylesheet
4250: 3e 7d 5d 20 0a 20 20 20 20 73 65 74 20 78 6d 6c  >}] .    set xml
4260: 72 6f 6f 74 20 5b 24 78 6d 6c 20 64 6f 63 75 6d  root [$xml docum
4270: 65 6e 74 45 6c 65 6d 65 6e 74 5d 0a 20 20 20 20  entElement].    
4280: 73 65 74 20 3a 3a 78 73 6c 74 4d 73 67 73 20 22  set ::xsltMsgs "
4290: 22 0a 20 20 20 20 24 78 6d 6c 72 6f 6f 74 20 78  ".    $xmlroot x
42a0: 73 6c 74 20 2d 78 73 6c 74 6d 65 73 73 61 67 65  slt -xsltmessage
42b0: 63 6d 64 20 78 73 6c 74 6d 65 73 73 61 67 65 63  cmd xsltmessagec
42c0: 6d 64 20 24 78 73 6c 74 20 72 65 73 75 6c 74 44  md $xslt resultD
42d0: 6f 63 0a 20 20 20 20 24 72 65 73 75 6c 74 44 6f  oc.    $resultDo
42e0: 63 20 64 65 6c 65 74 65 0a 20 20 20 20 24 78 6d  c delete.    $xm
42f0: 6c 20 64 65 6c 65 74 65 0a 20 20 20 20 24 78 73  l delete.    $xs
4300: 6c 74 20 64 65 6c 65 74 65 0a 20 20 20 20 73 65  lt delete.    se
4310: 74 20 3a 3a 78 73 6c 74 4d 73 67 73 0a 7d 20 7b  t ::xsltMsgs.} {
4320: 31 2e 20 63 61 6c 6c 20 74 65 72 6d 69 6e 61 74  1. call terminat
4330: 65 3a 20 30 20 32 2e 20 63 61 6c 6c 20 74 65 72  e: 0 2. call ter
4340: 6d 69 6e 61 74 65 3a 20 30 20 33 2e 20 63 61 6c  minate: 0 3. cal
4350: 6c 20 74 65 72 6d 69 6e 61 74 65 3a 20 30 20 7d  l terminate: 0 }
4360: 0a 0a 74 65 73 74 20 78 73 6c 74 2d 32 2e 31 39  ..test xslt-2.19
4370: 20 7b 78 73 6c 74 20 2d 78 73 6c 74 6d 65 73 73   {xslt -xsltmess
4380: 61 67 65 63 6d 64 7d 20 7b 0a 20 20 20 20 73 65  agecmd} {.    se
4390: 74 20 78 6d 6c 20 5b 64 6f 6d 20 70 61 72 73 65  t xml [dom parse
43a0: 20 2d 6b 65 65 70 45 6d 70 74 69 65 73 20 7b 3c   -keepEmpties {<
43b0: 72 6f 6f 74 2f 3e 7d 5d 0a 20 20 20 20 73 65 74  root/>}].    set
43c0: 20 78 73 6c 74 20 5b 64 6f 6d 20 70 61 72 73 65   xslt [dom parse
43d0: 20 2d 6b 65 65 70 45 6d 70 74 69 65 73 20 7b 3c   -keepEmpties {<
43e0: 78 73 6c 3a 73 74 79 6c 65 73 68 65 65 74 20 0a  xsl:stylesheet .
43f0: 20 20 78 6d 6c 6e 73 3a 78 73 6c 3d 22 68 74 74    xmlns:xsl="htt
4400: 70 3a 2f 2f 77 77 77 2e 77 33 2e 6f 72 67 2f 31  p://www.w3.org/1
4410: 39 39 39 2f 58 53 4c 2f 54 72 61 6e 73 66 6f 72  999/XSL/Transfor
4420: 6d 22 0a 20 20 76 65 72 73 69 6f 6e 3d 22 31 2e  m".  version="1.
4430: 30 22 3e 0a 20 20 3c 78 73 6c 3a 74 65 6d 70 6c  0">.  <xsl:templ
4440: 61 74 65 20 6d 61 74 63 68 3d 22 2f 22 3e 0a 20  ate match="/">. 
4450: 20 20 20 3c 78 73 6c 3a 74 65 78 74 3e 73 6f 6d     <xsl:text>som
4460: 65 20 74 65 78 74 3c 2f 78 73 6c 3a 74 65 78 74  e text</xsl:text
4470: 3e 0a 20 20 20 20 3c 78 73 6c 3a 6d 65 73 73 61  >.    <xsl:messa
4480: 67 65 3e 31 2e 20 63 61 6c 6c 3c 2f 78 73 6c 3a  ge>1. call</xsl:
4490: 6d 65 73 73 61 67 65 3e 0a 20 20 20 20 3c 78 73  message>.    <xs
44a0: 6c 3a 6d 65 73 73 61 67 65 20 74 65 72 6d 69 6e  l:message termin
44b0: 61 74 65 3d 22 79 65 73 22 3e 32 2e 20 63 61 6c  ate="yes">2. cal
44c0: 6c 3c 2f 78 73 6c 3a 6d 65 73 73 61 67 65 3e 0a  l</xsl:message>.
44d0: 20 20 20 20 3c 78 73 6c 3a 6d 65 73 73 61 67 65      <xsl:message
44e0: 3e 33 2e 20 63 61 6c 6c 3c 2f 78 73 6c 3a 6d 65  >3. call</xsl:me
44f0: 73 73 61 67 65 3e 0a 20 20 3c 2f 78 73 6c 3a 74  ssage>.  </xsl:t
4500: 65 6d 70 6c 61 74 65 3e 0a 3c 2f 78 73 6c 3a 73  emplate>.</xsl:s
4510: 74 79 6c 65 73 68 65 65 74 3e 7d 5d 20 0a 20 20  tylesheet>}] .  
4520: 20 20 73 65 74 20 78 6d 6c 72 6f 6f 74 20 5b 24    set xmlroot [$
4530: 78 6d 6c 20 64 6f 63 75 6d 65 6e 74 45 6c 65 6d  xml documentElem
4540: 65 6e 74 5d 0a 20 20 20 20 73 65 74 20 3a 3a 78  ent].    set ::x
4550: 73 6c 74 4d 73 67 73 20 22 22 0a 20 20 20 20 63  sltMsgs "".    c
4560: 61 74 63 68 20 7b 24 78 6d 6c 72 6f 6f 74 20 78  atch {$xmlroot x
4570: 73 6c 74 20 2d 78 73 6c 74 6d 65 73 73 61 67 65  slt -xsltmessage
4580: 63 6d 64 20 78 73 6c 74 6d 65 73 73 61 67 65 63  cmd xsltmessagec
4590: 6d 64 20 24 78 73 6c 74 20 72 65 73 75 6c 74 44  md $xslt resultD
45a0: 6f 63 7d 0a 20 20 20 20 24 78 6d 6c 20 64 65 6c  oc}.    $xml del
45b0: 65 74 65 0a 20 20 20 20 24 78 73 6c 74 20 64 65  ete.    $xslt de
45c0: 6c 65 74 65 0a 20 20 20 20 73 65 74 20 3a 3a 74  lete.    set ::t
45d0: 65 72 6d 69 6e 61 74 69 6e 67 4d 73 67 0a 7d 20  erminatingMsg.} 
45e0: 7b 31 7d 0a 0a 74 65 73 74 20 78 73 6c 74 2d 32  {1}..test xslt-2
45f0: 2e 32 30 20 7b 78 73 6c 74 20 74 6f 70 20 6c 65  .20 {xslt top le
4600: 76 65 6c 20 70 61 72 61 6d 65 74 65 72 3a 20 75  vel parameter: u
4610: 73 65 20 74 6f 70 20 6c 65 76 65 6c 20 70 61 72  se top level par
4620: 61 6d 20 74 6f 20 73 65 74 20 61 20 74 6f 70 20  am to set a top 
4630: 6c 65 76 65 6c 20 76 61 72 7d 20 7b 0a 20 20 20  level var} {.   
4640: 20 73 65 74 20 78 6d 6c 20 5b 64 6f 6d 20 70 61   set xml [dom pa
4650: 72 73 65 20 2d 6b 65 65 70 45 6d 70 74 69 65 73  rse -keepEmpties
4660: 20 7b 3c 72 6f 6f 74 2f 3e 7d 5d 0a 20 20 20 20   {<root/>}].    
4670: 73 65 74 20 78 73 6c 74 20 5b 64 6f 6d 20 70 61  set xslt [dom pa
4680: 72 73 65 20 2d 6b 65 65 70 45 6d 70 74 69 65 73  rse -keepEmpties
4690: 20 7b 3c 78 73 6c 3a 73 74 79 6c 65 73 68 65 65   {<xsl:styleshee
46a0: 74 20 0a 20 20 20 20 20 20 20 20 78 6d 6c 6e 73  t .        xmlns
46b0: 3a 78 73 6c 3d 22 68 74 74 70 3a 2f 2f 77 77 77  :xsl="http://www
46c0: 2e 77 33 2e 6f 72 67 2f 31 39 39 39 2f 58 53 4c  .w3.org/1999/XSL
46d0: 2f 54 72 61 6e 73 66 6f 72 6d 22 0a 20 20 20 20  /Transform".    
46e0: 20 20 20 20 76 65 72 73 69 6f 6e 3d 22 31 2e 30      version="1.0
46f0: 22 3e 0a 20 20 20 20 20 20 20 20 3c 78 73 6c 3a  ">.        <xsl:
4700: 70 61 72 61 6d 20 6e 61 6d 65 3d 22 73 6f 72 74  param name="sort
4710: 65 6e 74 69 74 79 22 3e 3c 2f 78 73 6c 3a 70 61  entity"></xsl:pa
4720: 72 61 6d 3e 0a 20 20 20 20 20 20 20 20 3c 78 73  ram>.        <xs
4730: 6c 3a 76 61 72 69 61 62 6c 65 20 6e 61 6d 65 3d  l:variable name=
4740: 22 73 6f 72 74 63 6f 6c 75 6d 6e 22 20 73 65 6c  "sortcolumn" sel
4750: 65 63 74 3d 22 24 73 6f 72 74 65 6e 74 69 74 79  ect="$sortentity
4760: 22 2f 3e 0a 20 20 20 20 20 20 20 20 3c 78 73 6c  "/>.        <xsl
4770: 3a 74 65 6d 70 6c 61 74 65 20 6d 61 74 63 68 3d  :template match=
4780: 22 2f 22 3e 0a 20 20 20 20 20 20 20 20 20 20 3c  "/">.          <
4790: 6f 75 74 3e 3c 78 73 6c 3a 76 61 6c 75 65 2d 6f  out><xsl:value-o
47a0: 66 20 73 65 6c 65 63 74 3d 22 24 73 6f 72 74 63  f select="$sortc
47b0: 6f 6c 75 6d 6e 22 2f 3e 3c 2f 6f 75 74 3e 0a 20  olumn"/></out>. 
47c0: 20 20 20 20 20 20 20 3c 2f 78 73 6c 3a 74 65 6d         </xsl:tem
47d0: 70 6c 61 74 65 3e 0a 20 20 20 20 20 20 20 20 3c  plate>.        <
47e0: 2f 78 73 6c 3a 73 74 79 6c 65 73 68 65 65 74 3e  /xsl:stylesheet>
47f0: 7d 5d 0a 20 20 20 20 24 78 6d 6c 20 78 73 6c 74  }].    $xml xslt
4800: 20 2d 70 61 72 61 6d 65 74 65 72 73 20 7b 73 6f   -parameters {so
4810: 72 74 65 6e 74 69 74 79 20 22 74 68 65 20 70 61  rtentity "the pa
4820: 72 61 6d 65 74 65 72 20 76 61 6c 75 65 22 7d 20  rameter value"} 
4830: 24 78 73 6c 74 20 72 65 73 75 6c 74 44 6f 63 0a  $xslt resultDoc.
4840: 20 20 20 20 73 65 74 20 72 65 73 75 6c 74 20 5b      set result [
4850: 24 72 65 73 75 6c 74 44 6f 63 20 61 73 58 4d 4c  $resultDoc asXML
4860: 20 2d 69 6e 64 65 6e 74 20 6e 6f 6e 65 5d 0a 20   -indent none]. 
4870: 20 20 20 24 72 65 73 75 6c 74 44 6f 63 20 64 65     $resultDoc de
4880: 6c 65 74 65 0a 20 20 20 20 24 78 6d 6c 20 64 65  lete.    $xml de
4890: 6c 65 74 65 0a 20 20 20 20 24 78 73 6c 74 20 64  lete.    $xslt d
48a0: 65 6c 65 74 65 0a 20 20 20 20 73 65 74 20 72 65  elete.    set re
48b0: 73 75 6c 74 0a 7d 20 7b 3c 6f 75 74 3e 74 68 65  sult.} {<out>the
48c0: 20 70 61 72 61 6d 65 74 65 72 20 76 61 6c 75 65   parameter value
48d0: 3c 2f 6f 75 74 3e 7d 0a 0a 70 72 6f 63 20 78 73  </out>}..proc xs
48e0: 6c 74 2d 32 2e 32 31 2d 78 73 6c 74 6d 73 67 63  lt-2.21-xsltmsgc
48f0: 6d 64 20 7b 6d 73 67 20 74 65 72 6d 69 6e 61 74  md {msg terminat
4900: 65 7d 20 7b 0a 20 20 20 20 67 6c 6f 62 61 6c 20  e} {.    global 
4910: 72 65 73 75 6c 74 0a 20 20 20 20 69 66 20 7b 24  result.    if {$
4920: 6d 73 67 20 65 71 20 22 33 22 7d 20 7b 0a 20 20  msg eq "3"} {.  
4930: 20 20 20 20 20 20 72 65 74 75 72 6e 20 2d 63 6f        return -co
4940: 64 65 20 62 72 65 61 6b 0a 20 20 20 20 7d 0a 20  de break.    }. 
4950: 20 20 20 61 70 70 65 6e 64 20 72 65 73 75 6c 74     append result
4960: 20 24 6d 73 67 0a 7d 0a 0a 74 65 73 74 20 78 73   $msg.}..test xs
4970: 6c 74 2d 32 2e 32 31 20 7b 78 73 6c 74 20 2d 78  lt-2.21 {xslt -x
4980: 73 6c 74 6d 65 73 73 61 67 65 63 6d 64 20 72 65  sltmessagecmd re
4990: 74 75 72 6e 20 63 6f 64 65 20 62 72 65 61 6b 7d  turn code break}
49a0: 20 7b 0a 20 20 20 20 73 65 74 20 72 65 73 75 6c   {.    set resul
49b0: 74 20 22 22 0a 20 20 20 20 73 65 74 20 78 6d 6c  t "".    set xml
49c0: 20 5b 64 6f 6d 20 70 61 72 73 65 20 7b 3c 64 6f   [dom parse {<do
49d0: 63 3e 3c 65 2f 3e 3c 65 2f 3e 3c 65 2f 3e 3c 65  c><e/><e/><e/><e
49e0: 2f 3e 3c 2f 64 6f 63 3e 7d 5d 0a 20 20 20 20 73  /></doc>}].    s
49f0: 65 74 20 78 73 6c 74 20 5b 64 6f 6d 20 70 61 72  et xslt [dom par
4a00: 73 65 20 7b 3c 78 73 6c 3a 73 74 79 6c 65 73 68  se {<xsl:stylesh
4a10: 65 65 74 20 0a 20 20 20 20 20 20 20 20 78 6d 6c  eet .        xml
4a20: 6e 73 3a 78 73 6c 3d 22 68 74 74 70 3a 2f 2f 77  ns:xsl="http://w
4a30: 77 77 2e 77 33 2e 6f 72 67 2f 31 39 39 39 2f 58  ww.w3.org/1999/X
4a40: 53 4c 2f 54 72 61 6e 73 66 6f 72 6d 22 0a 20 20  SL/Transform".  
4a50: 20 20 20 20 20 20 76 65 72 73 69 6f 6e 3d 22 31        version="1
4a60: 2e 30 22 3e 0a 20 20 20 20 20 20 20 20 3c 78 73  .0">.        <xs
4a70: 6c 3a 74 65 6d 70 6c 61 74 65 20 6d 61 74 63 68  l:template match
4a80: 3d 22 65 22 3e 0a 20 20 20 20 20 20 20 20 20 20  ="e">.          
4a90: 3c 78 73 6c 3a 6d 65 73 73 61 67 65 3e 3c 78 73  <xsl:message><xs
4aa0: 6c 3a 76 61 6c 75 65 2d 6f 66 20 73 65 6c 65 63  l:value-of selec
4ab0: 74 3d 22 70 6f 73 69 74 69 6f 6e 28 29 22 2f 3e  t="position()"/>
4ac0: 3c 2f 78 73 6c 3a 6d 65 73 73 61 67 65 3e 0a 20  </xsl:message>. 
4ad0: 20 20 20 20 20 20 20 3c 2f 78 73 6c 3a 74 65 6d         </xsl:tem
4ae0: 70 6c 61 74 65 3e 0a 20 20 20 20 20 20 20 20 3c  plate>.        <
4af0: 2f 78 73 6c 3a 73 74 79 6c 65 73 68 65 65 74 3e  /xsl:stylesheet>
4b00: 7d 5d 0a 20 20 20 20 63 61 74 63 68 20 7b 24 78  }].    catch {$x
4b10: 6d 6c 20 78 73 6c 74 20 2d 78 73 6c 74 6d 65 73  ml xslt -xsltmes
4b20: 73 61 67 65 63 6d 64 20 78 73 6c 74 2d 32 2e 32  sagecmd xslt-2.2
4b30: 31 2d 78 73 6c 74 6d 73 67 63 6d 64 20 24 78 73  1-xsltmsgcmd $xs
4b40: 6c 74 20 72 65 73 75 6c 74 44 6f 63 7d 20 65 72  lt resultDoc} er
4b50: 72 4d 73 67 0a 20 20 20 20 61 70 70 65 6e 64 20  rMsg.    append 
4b60: 72 65 73 75 6c 74 20 24 72 65 73 75 6c 74 44 6f  result $resultDo
4b70: 63 20 24 65 72 72 4d 73 67 0a 20 20 20 20 24 78  c $errMsg.    $x
4b80: 6d 6c 20 64 65 6c 65 74 65 0a 20 20 20 20 24 78  ml delete.    $x
4b90: 73 6c 74 20 64 65 6c 65 74 65 0a 20 20 20 20 73  slt delete.    s
4ba0: 65 74 20 72 65 73 75 6c 74 0a 7d 20 7b 31 32 7d  et result.} {12}
4bb0: 0a 0a 74 65 73 74 20 78 73 6c 74 2d 32 2e 32 32  ..test xslt-2.22
4bc0: 20 7b 78 73 6c 74 20 2d 78 73 6c 74 6d 65 73 73   {xslt -xsltmess
4bd0: 61 67 65 63 6d 64 20 72 65 74 75 72 6e 20 63 6f  agecmd return co
4be0: 64 65 20 62 72 65 61 6b 7d 20 7b 0a 20 20 20 20  de break} {.    
4bf0: 73 65 74 20 72 65 73 75 6c 74 20 22 22 0a 20 20  set result "".  
4c00: 20 20 73 65 74 20 78 6d 6c 20 5b 64 6f 6d 20 70    set xml [dom p
4c10: 61 72 73 65 20 7b 3c 64 6f 63 3e 3c 65 2f 3e 3c  arse {<doc><e/><
4c20: 65 2f 3e 3c 65 2f 3e 3c 65 2f 3e 3c 2f 64 6f 63  e/><e/><e/></doc
4c30: 3e 7d 5d 0a 20 20 20 20 73 65 74 20 78 73 6c 74  >}].    set xslt
4c40: 20 5b 64 6f 6d 20 70 61 72 73 65 20 7b 3c 78 73   [dom parse {<xs
4c50: 6c 3a 73 74 79 6c 65 73 68 65 65 74 20 0a 20 20  l:stylesheet .  
4c60: 20 20 20 20 20 20 78 6d 6c 6e 73 3a 78 73 6c 3d        xmlns:xsl=
4c70: 22 68 74 74 70 3a 2f 2f 77 77 77 2e 77 33 2e 6f  "http://www.w3.o
4c80: 72 67 2f 31 39 39 39 2f 58 53 4c 2f 54 72 61 6e  rg/1999/XSL/Tran
4c90: 73 66 6f 72 6d 22 0a 20 20 20 20 20 20 20 20 76  sform".        v
4ca0: 65 72 73 69 6f 6e 3d 22 31 2e 30 22 3e 0a 20 20  ersion="1.0">.  
4cb0: 20 20 20 20 20 20 3c 78 73 6c 3a 74 65 6d 70 6c        <xsl:templ
4cc0: 61 74 65 20 6d 61 74 63 68 3d 22 65 22 3e 0a 20  ate match="e">. 
4cd0: 20 20 20 20 20 20 20 20 20 3c 78 73 6c 3a 6d 65           <xsl:me
4ce0: 73 73 61 67 65 3e 3c 78 73 6c 3a 76 61 6c 75 65  ssage><xsl:value
4cf0: 2d 6f 66 20 73 65 6c 65 63 74 3d 22 70 6f 73 69  -of select="posi
4d00: 74 69 6f 6e 28 29 22 2f 3e 3c 2f 78 73 6c 3a 6d  tion()"/></xsl:m
4d10: 65 73 73 61 67 65 3e 0a 20 20 20 20 20 20 20 20  essage>.        
4d20: 3c 2f 78 73 6c 3a 74 65 6d 70 6c 61 74 65 3e 0a  </xsl:template>.
4d30: 20 20 20 20 20 20 20 20 3c 2f 78 73 6c 3a 73 74          </xsl:st
4d40: 79 6c 65 73 68 65 65 74 3e 7d 5d 0a 20 20 20 20  ylesheet>}].    
4d50: 73 65 74 20 72 65 73 75 6c 74 44 6f 63 20 22 75  set resultDoc "u
4d60: 6e 74 6f 75 63 68 65 64 22 0a 20 20 20 20 63 61  ntouched".    ca
4d70: 74 63 68 20 7b 24 78 6d 6c 20 78 73 6c 74 20 2d  tch {$xml xslt -
4d80: 69 67 6e 6f 72 65 55 6e 64 65 63 6c 61 72 65 64  ignoreUndeclared
4d90: 50 61 72 61 6d 65 74 65 72 73 20 2d 78 73 6c 74  Parameters -xslt
4da0: 6d 65 73 73 61 67 65 63 6d 64 20 78 73 6c 74 2d  messagecmd xslt-
4db0: 32 2e 32 31 2d 78 73 6c 74 6d 73 67 63 6d 64 20  2.21-xsltmsgcmd 
4dc0: 24 78 73 6c 74 20 72 65 73 75 6c 74 44 6f 63 7d  $xslt resultDoc}
4dd0: 20 65 72 72 4d 73 67 0a 20 20 20 20 61 70 70 65   errMsg.    appe
4de0: 6e 64 20 72 65 73 75 6c 74 20 24 72 65 73 75 6c  nd result $resul
4df0: 74 44 6f 63 0a 20 20 20 20 24 78 6d 6c 20 64 65  tDoc.    $xml de
4e00: 6c 65 74 65 0a 20 20 20 20 24 78 73 6c 74 20 64  lete.    $xslt d
4e10: 65 6c 65 74 65 0a 20 20 20 20 73 65 74 20 72 65  elete.    set re
4e20: 73 75 6c 74 0a 7d 20 7b 31 32 7d 0a 0a 74 65 73  sult.} {12}..tes
4e30: 74 20 78 73 6c 74 2d 32 2e 32 33 20 7b 78 73 6c  t xslt-2.23 {xsl
4e40: 74 20 6f 75 74 70 75 74 56 61 72 7d 20 7b 0a 20  t outputVar} {. 
4e50: 20 20 20 73 65 74 20 72 65 73 75 6c 74 20 22 22     set result ""
4e60: 0a 20 20 20 20 73 65 74 20 78 6d 6c 20 5b 64 6f  .    set xml [do
4e70: 6d 20 70 61 72 73 65 20 7b 3c 64 6f 63 2f 3e 7d  m parse {<doc/>}
4e80: 5d 0a 20 20 20 20 73 65 74 20 78 73 6c 74 20 5b  ].    set xslt [
4e90: 64 6f 6d 20 70 61 72 73 65 20 7b 3c 78 73 6c 3a  dom parse {<xsl:
4ea0: 73 74 79 6c 65 73 68 65 65 74 20 0a 20 20 20 20  stylesheet .    
4eb0: 20 20 20 20 78 6d 6c 6e 73 3a 78 73 6c 3d 22 68      xmlns:xsl="h
4ec0: 74 74 70 3a 2f 2f 77 77 77 2e 77 33 2e 6f 72 67  ttp://www.w3.org
4ed0: 2f 31 39 39 39 2f 58 53 4c 2f 54 72 61 6e 73 66  /1999/XSL/Transf
4ee0: 6f 72 6d 22 0a 20 20 20 20 20 20 20 20 76 65 72  orm".        ver
4ef0: 73 69 6f 6e 3d 22 31 2e 30 22 3e 0a 20 20 20 20  sion="1.0">.    
4f00: 20 20 20 20 3c 78 73 6c 3a 74 65 6d 70 6c 61 74      <xsl:templat
4f10: 65 20 6d 61 74 63 68 3d 22 2f 22 3e 0a 20 20 20  e match="/">.   
4f20: 20 20 20 20 20 3c 72 65 73 75 6c 74 44 6f 63 2f       <resultDoc/
4f30: 3e 0a 20 20 20 20 20 20 20 20 3c 2f 78 73 6c 3a  >.        </xsl:
4f40: 74 65 6d 70 6c 61 74 65 3e 0a 20 20 20 20 20 20  template>.      
4f50: 20 20 3c 2f 78 73 6c 3a 73 74 79 6c 65 73 68 65    </xsl:styleshe
4f60: 65 74 3e 7d 5d 0a 20 20 20 20 73 65 74 20 72 65  et>}].    set re
4f70: 73 75 6c 74 44 6f 63 20 22 75 6e 74 6f 75 63 68  sultDoc "untouch
4f80: 65 64 22 0a 20 20 20 20 63 61 74 63 68 20 7b 24  ed".    catch {$
4f90: 78 6d 6c 20 78 73 6c 74 20 2d 66 6f 6f 20 24 78  xml xslt -foo $x
4fa0: 73 6c 74 20 72 65 73 75 6c 74 44 6f 63 7d 20 65  slt resultDoc} e
4fb0: 72 72 4d 73 67 0a 20 20 20 20 61 70 70 65 6e 64  rrMsg.    append
4fc0: 20 72 65 73 75 6c 74 20 24 72 65 73 75 6c 74 44   result $resultD
4fd0: 6f 63 0a 20 20 20 20 24 78 6d 6c 20 64 65 6c 65  oc.    $xml dele
4fe0: 74 65 0a 20 20 20 20 24 78 73 6c 74 20 64 65 6c  te.    $xslt del
4ff0: 65 74 65 0a 20 20 20 20 73 65 74 20 72 65 73 75  ete.    set resu
5000: 6c 74 0a 7d 20 7b 75 6e 74 6f 75 63 68 65 64 7d  lt.} {untouched}
5010: 0a 0a 74 65 73 74 20 78 73 6c 74 2d 32 2e 32 34  ..test xslt-2.24
5020: 20 7b 78 73 6c 74 20 6f 75 74 70 75 74 56 61 72   {xslt outputVar
5030: 7d 20 7b 0a 20 20 20 20 73 65 74 20 78 6d 6c 20  } {.    set xml 
5040: 5b 64 6f 6d 20 70 61 72 73 65 20 7b 3c 64 6f 63  [dom parse {<doc
5050: 2f 3e 7d 5d 0a 20 20 20 20 73 65 74 20 78 73 6c  />}].    set xsl
5060: 74 20 5b 64 6f 6d 20 70 61 72 73 65 20 7b 3c 78  t [dom parse {<x
5070: 73 6c 3a 73 74 79 6c 65 73 68 65 65 74 20 0a 20  sl:stylesheet . 
5080: 20 20 20 20 20 20 20 78 6d 6c 6e 73 3a 78 73 6c         xmlns:xsl
5090: 3d 22 68 74 74 70 3a 2f 2f 77 77 77 2e 77 33 2e  ="http://www.w3.
50a0: 6f 72 67 2f 31 39 39 39 2f 58 53 4c 2f 54 72 61  org/1999/XSL/Tra
50b0: 6e 73 66 6f 72 6d 22 0a 20 20 20 20 20 20 20 20  nsform".        
50c0: 76 65 72 73 69 6f 6e 3d 22 31 2e 30 22 3e 0a 20  version="1.0">. 
50d0: 20 20 20 20 20 20 20 3c 78 73 6c 3a 74 65 6d 70         <xsl:temp
50e0: 6c 61 74 65 20 6d 61 74 63 68 3d 22 2f 22 3e 0a  late match="/">.
50f0: 20 20 20 20 20 20 20 20 3c 72 65 73 75 6c 74 44          <resultD
5100: 6f 63 2f 3e 0a 20 20 20 20 20 20 20 20 3c 2f 78  oc/>.        </x
5110: 73 6c 3a 74 65 6d 70 6c 61 74 65 3e 0a 20 20 20  sl:template>.   
5120: 20 20 20 20 20 3c 2f 78 73 6c 3a 73 74 79 6c 65       </xsl:style
5130: 73 68 65 65 74 3e 7d 5d 0a 20 20 20 20 73 65 74  sheet>}].    set
5140: 20 72 65 73 75 6c 74 20 5b 63 61 74 63 68 20 7b   result [catch {
5150: 24 78 6d 6c 20 78 73 6c 74 20 2d 66 6f 6f 20 24  $xml xslt -foo $
5160: 78 73 6c 74 20 7d 5d 0a 20 20 20 20 24 78 6d 6c  xslt }].    $xml
5170: 20 64 65 6c 65 74 65 0a 20 20 20 20 24 78 73 6c   delete.    $xsl
5180: 74 20 64 65 6c 65 74 65 0a 20 20 20 20 73 65 74  t delete.    set
5190: 20 72 65 73 75 6c 74 0a 7d 20 7b 31 7d 0a 0a 74   result.} {1}..t
51a0: 65 73 74 20 78 73 6c 74 2d 32 2e 32 35 20 7b 78  est xslt-2.25 {x
51b0: 73 6c 74 20 6f 75 74 70 75 74 56 61 72 7d 20 7b  slt outputVar} {
51c0: 0a 20 20 20 20 73 65 74 20 78 6d 6c 20 5b 64 6f  .    set xml [do
51d0: 6d 20 70 61 72 73 65 20 7b 3c 64 6f 63 2f 3e 7d  m parse {<doc/>}
51e0: 5d 0a 20 20 20 20 73 65 74 20 78 73 6c 74 20 5b  ].    set xslt [
51f0: 64 6f 6d 20 70 61 72 73 65 20 7b 3c 78 73 6c 3a  dom parse {<xsl:
5200: 73 74 79 6c 65 73 68 65 65 74 20 0a 20 20 20 20  stylesheet .    
5210: 20 20 20 20 78 6d 6c 6e 73 3a 78 73 6c 3d 22 68      xmlns:xsl="h
5220: 74 74 70 3a 2f 2f 77 77 77 2e 77 33 2e 6f 72 67  ttp://www.w3.org
5230: 2f 31 39 39 39 2f 58 53 4c 2f 54 72 61 6e 73 66  /1999/XSL/Transf
5240: 6f 72 6d 22 0a 20 20 20 20 20 20 20 20 76 65 72  orm".        ver
5250: 73 69 6f 6e 3d 22 31 2e 30 22 3e 0a 20 20 20 20  sion="1.0">.    
5260: 20 20 20 20 3c 78 73 6c 3a 74 65 6d 70 6c 61 74      <xsl:templat
5270: 65 20 6d 61 74 63 68 3d 22 2f 22 3e 0a 20 20 20  e match="/">.   
5280: 20 20 20 20 20 3c 78 73 6c 3a 6d 65 73 73 61 67       <xsl:messag
5290: 65 3e 48 65 72 65 3c 2f 78 73 6c 3a 6d 65 73 73  e>Here</xsl:mess
52a0: 61 67 65 3e 0a 20 20 20 20 20 20 20 20 3c 72 65  age>.        <re
52b0: 73 75 6c 74 44 6f 63 2f 3e 0a 20 20 20 20 20 20  sultDoc/>.      
52c0: 20 20 3c 2f 78 73 6c 3a 74 65 6d 70 6c 61 74 65    </xsl:template
52d0: 3e 0a 20 20 20 20 20 20 20 20 3c 2f 78 73 6c 3a  >.        </xsl:
52e0: 73 74 79 6c 65 73 68 65 65 74 3e 7d 5d 0a 20 20  stylesheet>}].  
52f0: 20 20 24 78 6d 6c 20 78 73 6c 74 20 24 78 73 6c    $xml xslt $xsl
5300: 74 20 72 65 73 75 6c 74 44 6f 63 0a 20 20 20 20  t resultDoc.    
5310: 24 78 6d 6c 20 64 65 6c 65 74 65 0a 20 20 20 20  $xml delete.    
5320: 24 78 73 6c 74 20 64 65 6c 65 74 65 0a 20 20 20  $xslt delete.   
5330: 20 73 65 74 20 72 65 73 75 6c 74 20 5b 24 72 65   set result [$re
5340: 73 75 6c 74 44 6f 63 20 61 73 58 4d 4c 20 2d 69  sultDoc asXML -i
5350: 6e 64 65 6e 74 20 6e 6f 6e 65 5d 0a 20 20 20 20  ndent none].    
5360: 24 72 65 73 75 6c 74 44 6f 63 20 64 65 6c 65 74  $resultDoc delet
5370: 65 0a 20 20 20 20 73 65 74 20 72 65 73 75 6c 74  e.    set result
5380: 0a 7d 20 7b 3c 72 65 73 75 6c 74 44 6f 63 2f 3e  .} {<resultDoc/>
5390: 7d 0a 0a 74 65 73 74 20 78 73 6c 74 2d 32 2e 32  }..test xslt-2.2
53a0: 36 20 7b 78 73 6c 74 20 2d 6d 61 78 41 70 70 6c  6 {xslt -maxAppl
53b0: 79 44 65 70 74 68 20 6f 70 74 69 6f 6e 7d 20 7b  yDepth option} {
53c0: 0a 20 20 20 20 73 65 74 20 78 6d 6c 20 5b 64 6f  .    set xml [do
53d0: 6d 20 70 61 72 73 65 20 7b 3c 65 3e 3c 65 3e 3c  m parse {<e><e><
53e0: 65 3e 3c 65 3e 3c 2f 65 3e 3c 2f 65 3e 3c 2f 65  e><e></e></e></e
53f0: 3e 3c 2f 65 3e 7d 5d 0a 20 20 20 20 73 65 74 20  ></e>}].    set 
5400: 78 73 6c 74 20 5b 64 6f 6d 20 70 61 72 73 65 20  xslt [dom parse 
5410: 7b 3c 78 73 6c 3a 73 74 79 6c 65 73 68 65 65 74  {<xsl:stylesheet
5420: 20 0a 20 20 20 20 20 20 20 20 78 6d 6c 6e 73 3a   .        xmlns:
5430: 78 73 6c 3d 22 68 74 74 70 3a 2f 2f 77 77 77 2e  xsl="http://www.
5440: 77 33 2e 6f 72 67 2f 31 39 39 39 2f 58 53 4c 2f  w3.org/1999/XSL/
5450: 54 72 61 6e 73 66 6f 72 6d 22 0a 20 20 20 20 20  Transform".     
5460: 20 20 20 76 65 72 73 69 6f 6e 3d 22 31 2e 30 22     version="1.0"
5470: 3e 0a 20 20 20 20 20 20 20 20 3c 78 73 6c 3a 74  >.        <xsl:t
5480: 65 6d 70 6c 61 74 65 20 6d 61 74 63 68 3d 22 65  emplate match="e
5490: 22 3e 0a 20 20 20 20 20 20 20 20 3c 78 73 6c 3a  ">.        <xsl:
54a0: 74 65 78 74 3e 65 3c 2f 78 73 6c 3a 74 65 78 74  text>e</xsl:text
54b0: 3e 0a 20 20 20 20 20 20 20 20 3c 78 73 6c 3a 61  >.        <xsl:a
54c0: 70 70 6c 79 2d 74 65 6d 70 6c 61 74 65 73 20 73  pply-templates s
54d0: 65 6c 65 63 74 3d 22 65 22 2f 3e 0a 20 20 20 20  elect="e"/>.    
54e0: 20 20 20 20 3c 2f 78 73 6c 3a 74 65 6d 70 6c 61      </xsl:templa
54f0: 74 65 3e 0a 20 20 20 20 20 20 20 20 3c 2f 78 73  te>.        </xs
5500: 6c 3a 73 74 79 6c 65 73 68 65 65 74 3e 7d 5d 0a  l:stylesheet>}].
5510: 20 20 20 20 63 61 74 63 68 20 7b 24 78 6d 6c 20      catch {$xml 
5520: 78 73 6c 74 20 2d 6d 61 78 41 70 70 6c 79 44 65  xslt -maxApplyDe
5530: 70 74 68 20 33 20 24 78 73 6c 74 7d 20 65 72 72  pth 3 $xslt} err
5540: 4d 73 67 0a 20 20 20 20 24 78 6d 6c 20 64 65 6c  Msg.    $xml del
5550: 65 74 65 0a 20 20 20 20 24 78 73 6c 74 20 64 65  ete.    $xslt de
5560: 6c 65 74 65 0a 20 20 20 20 73 65 74 20 65 72 72  lete.    set err
5570: 4d 73 67 0a 7d 20 22 4d 61 78 69 6d 75 6d 20 6e  Msg.} "Maximum n
5580: 65 73 74 65 64 20 61 70 70 6c 79 20 74 65 6d 70  ested apply temp
5590: 6c 61 74 65 73 20 72 65 61 63 68 65 64 20 28 70  lates reached (p
55a0: 6f 74 65 6e 74 69 61 6c 20 69 6e 66 69 6e 69 74  otential infinit
55b0: 65 20 74 65 6d 70 6c 61 74 65 20 72 65 63 75 72  e template recur
55c0: 73 69 6f 6e 3f 29 2e 22 0a 0a 74 65 73 74 20 78  sion?)."..test x
55d0: 73 6c 74 2d 33 2e 31 20 7b 78 73 6c 74 20 76 61  slt-3.1 {xslt va
55e0: 72 69 61 62 6c 65 20 73 63 6f 70 65 7d 20 7b 0a  riable scope} {.
55f0: 20 20 20 20 73 65 74 20 78 6d 6c 20 5b 64 6f 6d      set xml [dom
5600: 20 70 61 72 73 65 20 7b 3c 72 6f 6f 74 2f 3e 7d   parse {<root/>}
5610: 5d 0a 20 20 20 20 73 65 74 20 78 73 6c 74 20 5b  ].    set xslt [
5620: 64 6f 6d 20 70 61 72 73 65 20 7b 3c 78 73 6c 3a  dom parse {<xsl:
5630: 73 74 79 6c 65 73 68 65 65 74 20 78 6d 6c 6e 73  stylesheet xmlns
5640: 3a 78 73 6c 3d 22 68 74 74 70 3a 2f 2f 77 77 77  :xsl="http://www
5650: 2e 77 33 2e 6f 72 67 2f 31 39 39 39 2f 58 53 4c  .w3.org/1999/XSL
5660: 2f 54 72 61 6e 73 66 6f 72 6d 22 20 76 65 72 73  /Transform" vers
5670: 69 6f 6e 3d 22 31 2e 30 22 3e 0a 20 20 3c 78 73  ion="1.0">.  <xs
5680: 6c 3a 74 65 6d 70 6c 61 74 65 20 6d 61 74 63 68  l:template match
5690: 3d 22 2f 22 3e 0a 20 20 20 20 3c 78 73 6c 3a 76  ="/">.    <xsl:v
56a0: 61 72 69 61 62 6c 65 20 6e 61 6d 65 3d 22 6d 61  ariable name="ma
56b0: 69 6e 22 20 73 65 6c 65 63 74 3d 22 27 6d 61 69  in" select="'mai
56c0: 6e 27 22 2f 3e 0a 20 20 20 20 3c 78 73 6c 3a 63  n'"/>.    <xsl:c
56d0: 61 6c 6c 2d 74 65 6d 70 6c 61 74 65 20 6e 61 6d  all-template nam
56e0: 65 3d 22 66 69 72 73 74 22 2f 3e 0a 20 20 3c 2f  e="first"/>.  </
56f0: 78 73 6c 3a 74 65 6d 70 6c 61 74 65 3e 0a 20 20  xsl:template>.  
5700: 3c 78 73 6c 3a 74 65 6d 70 6c 61 74 65 20 6e 61  <xsl:template na
5710: 6d 65 3d 22 66 69 72 73 74 22 3e 0a 20 20 20 20  me="first">.    
5720: 3c 78 73 6c 3a 76 61 72 69 61 62 6c 65 20 6e 61  <xsl:variable na
5730: 6d 65 3d 22 66 69 72 73 74 56 61 72 22 20 73 65  me="firstVar" se
5740: 6c 65 63 74 3d 22 27 66 69 72 73 74 56 61 72 27  lect="'firstVar'
5750: 22 2f 3e 0a 20 20 20 20 3c 78 73 6c 3a 63 61 6c  "/>.    <xsl:cal
5760: 6c 2d 74 65 6d 70 6c 61 74 65 20 6e 61 6d 65 3d  l-template name=
5770: 22 73 65 63 6f 6e 64 22 2f 3e 0a 20 20 3c 2f 78  "second"/>.  </x
5780: 73 6c 3a 74 65 6d 70 6c 61 74 65 3e 0a 20 20 3c  sl:template>.  <
5790: 78 73 6c 3a 74 65 6d 70 6c 61 74 65 20 6e 61 6d  xsl:template nam
57a0: 65 3d 22 73 65 63 6f 6e 64 22 3e 0a 20 20 20 20  e="second">.    
57b0: 3c 78 73 6c 3a 76 61 72 69 61 62 6c 65 20 6e 61  <xsl:variable na
57c0: 6d 65 3d 22 73 65 63 6f 6e 64 56 61 72 22 20 73  me="secondVar" s
57d0: 65 6c 65 63 74 3d 22 27 73 65 63 6f 6e 64 56 61  elect="'secondVa
57e0: 72 27 22 2f 3e 0a 20 20 20 20 3c 78 73 6c 3a 76  r'"/>.    <xsl:v
57f0: 61 6c 75 65 2d 6f 66 20 73 65 6c 65 63 74 3d 22  alue-of select="
5800: 24 6d 61 69 6e 22 2f 3e 0a 20 20 20 20 3c 78 73  $main"/>.    <xs
5810: 6c 3a 76 61 6c 75 65 2d 6f 66 20 73 65 6c 65 63  l:value-of selec
5820: 74 3d 22 24 66 69 72 73 74 56 61 72 22 2f 3e 0a  t="$firstVar"/>.
5830: 20 20 20 20 3c 78 73 6c 3a 76 61 6c 75 65 2d 6f      <xsl:value-o
5840: 66 20 73 65 6c 65 63 74 3d 22 24 73 65 63 6f 6e  f select="$secon
5850: 64 56 61 72 22 2f 3e 0a 20 20 3c 2f 78 73 6c 3a  dVar"/>.  </xsl:
5860: 74 65 6d 70 6c 61 74 65 3e 0a 20 20 20 20 3c 2f  template>.    </
5870: 78 73 6c 3a 73 74 79 6c 65 73 68 65 65 74 3e 7d  xsl:stylesheet>}
5880: 5d 0a 20 20 20 20 73 65 74 20 78 6d 6c 72 6f 6f  ].    set xmlroo
5890: 74 20 5b 24 78 6d 6c 20 64 6f 63 75 6d 65 6e 74  t [$xml document
58a0: 45 6c 65 6d 65 6e 74 5d 0a 20 20 20 20 63 61 74  Element].    cat
58b0: 63 68 20 7b 24 78 6d 6c 72 6f 6f 74 20 78 73 6c  ch {$xmlroot xsl
58c0: 74 20 24 78 73 6c 74 20 72 65 73 75 6c 74 44 6f  t $xslt resultDo
58d0: 63 7d 20 65 72 72 4d 73 67 0a 20 20 20 20 24 78  c} errMsg.    $x
58e0: 6d 6c 20 64 65 6c 65 74 65 0a 20 20 20 20 24 78  ml delete.    $x
58f0: 73 6c 74 20 64 65 6c 65 74 65 0a 20 20 20 20 73  slt delete.    s
5900: 65 74 20 65 72 72 4d 73 67 0a 7d 20 7b 56 61 72  et errMsg.} {Var
5910: 69 61 62 6c 65 20 22 6d 61 69 6e 22 20 68 61 73  iable "main" has
5920: 20 6e 6f 74 20 62 65 65 6e 20 64 65 63 6c 61 72   not been declar
5930: 65 64 2e 7d 0a 0a 74 65 73 74 20 78 73 6c 74 2d  ed.}..test xslt-
5940: 33 2e 32 20 7b 78 73 6c 74 20 65 72 72 6f 72 20  3.2 {xslt error 
5950: 6d 73 67 20 6f 66 20 76 61 72 69 61 62 6c 65 20  msg of variable 
5960: 72 65 64 65 63 6c 61 72 61 74 69 6f 6e 20 69 6e  redeclaration in
5970: 20 6f 6e 65 20 74 65 6d 70 6c 61 74 65 7d 20 7b   one template} {
5980: 0a 20 20 20 20 73 65 74 20 78 6d 6c 20 5b 64 6f  .    set xml [do
5990: 6d 20 70 61 72 73 65 20 7b 3c 72 6f 6f 74 2f 3e  m parse {<root/>
59a0: 7d 5d 0a 20 20 20 20 73 65 74 20 78 73 6c 74 20  }].    set xslt 
59b0: 5b 64 6f 6d 20 70 61 72 73 65 20 7b 3c 78 73 6c  [dom parse {<xsl
59c0: 3a 73 74 79 6c 65 73 68 65 65 74 20 78 6d 6c 6e  :stylesheet xmln
59d0: 73 3a 78 73 6c 3d 22 68 74 74 70 3a 2f 2f 77 77  s:xsl="http://ww
59e0: 77 2e 77 33 2e 6f 72 67 2f 31 39 39 39 2f 58 53  w.w3.org/1999/XS
59f0: 4c 2f 54 72 61 6e 73 66 6f 72 6d 22 20 76 65 72  L/Transform" ver
5a00: 73 69 6f 6e 3d 22 31 2e 30 22 3e 0a 20 20 3c 78  sion="1.0">.  <x
5a10: 73 6c 3a 74 65 6d 70 6c 61 74 65 20 6d 61 74 63  sl:template matc
5a20: 68 3d 22 2f 22 3e 0a 20 20 20 20 3c 78 73 6c 3a  h="/">.    <xsl:
5a30: 76 61 72 69 61 62 6c 65 20 6e 61 6d 65 3d 22 76  variable name="v
5a40: 61 72 22 20 73 65 6c 65 63 74 3d 22 27 66 69 72  ar" select="'fir
5a50: 73 74 20 76 61 6c 75 6c 65 27 22 2f 3e 0a 20 20  st valule'"/>.  
5a60: 20 20 3c 78 73 6c 3a 76 61 72 69 61 62 6c 65 20    <xsl:variable 
5a70: 6e 61 6d 65 3d 22 76 61 72 22 20 73 65 6c 65 63  name="var" selec
5a80: 74 3d 22 27 73 65 63 6f 6e 64 20 76 61 6c 75 6c  t="'second valul
5a90: 65 27 22 2f 3e 0a 20 20 20 20 3c 78 73 6c 3a 76  e'"/>.    <xsl:v
5aa0: 61 6c 75 65 2d 6f 66 20 73 65 6c 65 63 74 3d 22  alue-of select="
5ab0: 24 76 61 72 22 2f 3e 20 20 20 20 0a 20 20 3c 2f  $var"/>    .  </
5ac0: 78 73 6c 3a 74 65 6d 70 6c 61 74 65 3e 0a 20 20  xsl:template>.  
5ad0: 20 20 20 20 20 20 3c 2f 78 73 6c 3a 73 74 79 6c        </xsl:styl
5ae0: 65 73 68 65 65 74 3e 7d 5d 0a 20 20 20 20 63 61  esheet>}].    ca
5af0: 74 63 68 20 7b 24 78 6d 6c 20 78 73 6c 74 20 24  tch {$xml xslt $
5b00: 78 73 6c 74 20 72 65 73 75 6c 74 44 6f 63 7d 20  xslt resultDoc} 
5b10: 65 72 72 4d 73 67 0a 20 20 20 20 24 78 6d 6c 20  errMsg.    $xml 
5b20: 64 65 6c 65 74 65 0a 20 20 20 20 24 78 73 6c 74  delete.    $xslt
5b30: 20 64 65 6c 65 74 65 0a 20 20 20 20 73 65 74 20   delete.    set 
5b40: 65 72 72 4d 73 67 0a 7d 20 7b 56 61 72 69 61 62  errMsg.} {Variab
5b50: 6c 65 20 27 76 61 72 27 20 69 73 20 61 6c 72 65  le 'var' is alre
5b60: 61 64 79 20 64 65 63 6c 61 72 65 64 20 69 6e 20  ady declared in 
5b70: 74 68 69 73 20 74 65 6d 70 6c 61 74 65 7d 0a 0a  this template}..
5b80: 74 65 73 74 20 78 73 6c 74 2d 33 2e 33 20 7b 75  test xslt-3.3 {u
5b90: 73 65 20 74 6f 70 20 6c 65 76 65 6c 20 76 61 72  se top level var
5ba0: 20 74 6f 20 73 65 74 20 61 20 74 6f 70 20 6c 65   to set a top le
5bb0: 76 65 6c 20 76 61 72 7d 20 7b 0a 20 20 20 20 73  vel var} {.    s
5bc0: 65 74 20 78 6d 6c 20 5b 64 6f 6d 20 70 61 72 73  et xml [dom pars
5bd0: 65 20 2d 6b 65 65 70 45 6d 70 74 69 65 73 20 7b  e -keepEmpties {
5be0: 3c 72 6f 6f 74 2f 3e 7d 5d 0a 20 20 20 20 73 65  <root/>}].    se
5bf0: 74 20 78 73 6c 74 20 5b 64 6f 6d 20 70 61 72 73  t xslt [dom pars
5c00: 65 20 2d 6b 65 65 70 45 6d 70 74 69 65 73 20 7b  e -keepEmpties {
5c10: 3c 78 73 6c 3a 73 74 79 6c 65 73 68 65 65 74 20  <xsl:stylesheet 
5c20: 0a 20 20 20 20 20 20 20 20 78 6d 6c 6e 73 3a 78  .        xmlns:x
5c30: 73 6c 3d 22 68 74 74 70 3a 2f 2f 77 77 77 2e 77  sl="http://www.w
5c40: 33 2e 6f 72 67 2f 31 39 39 39 2f 58 53 4c 2f 54  3.org/1999/XSL/T
5c50: 72 61 6e 73 66 6f 72 6d 22 0a 20 20 20 20 20 20  ransform".      
5c60: 20 20 76 65 72 73 69 6f 6e 3d 22 31 2e 30 22 3e    version="1.0">
5c70: 0a 20 20 20 20 20 20 20 20 3c 78 73 6c 3a 76 61  .        <xsl:va
5c80: 72 69 61 62 6c 65 20 6e 61 6d 65 3d 22 76 61 72  riable name="var
5c90: 31 22 20 73 65 6c 65 63 74 3d 22 27 76 61 72 31  1" select="'var1
5ca0: 56 61 6c 75 65 27 22 3e 3c 2f 78 73 6c 3a 76 61  Value'"></xsl:va
5cb0: 72 69 61 62 6c 65 3e 0a 20 20 20 20 20 20 20 20  riable>.        
5cc0: 3c 78 73 6c 3a 76 61 72 69 61 62 6c 65 20 6e 61  <xsl:variable na
5cd0: 6d 65 3d 22 76 61 72 32 22 20 73 65 6c 65 63 74  me="var2" select
5ce0: 3d 22 24 76 61 72 31 22 2f 3e 0a 20 20 20 20 20  ="$var1"/>.     
5cf0: 20 20 20 3c 78 73 6c 3a 74 65 6d 70 6c 61 74 65     <xsl:template
5d00: 20 6d 61 74 63 68 3d 22 2f 22 3e 0a 20 20 20 20   match="/">.    
5d10: 20 20 20 20 20 20 3c 6f 75 74 3e 3c 78 73 6c 3a        <out><xsl:
5d20: 76 61 6c 75 65 2d 6f 66 20 73 65 6c 65 63 74 3d  value-of select=
5d30: 22 24 76 61 72 32 22 2f 3e 3c 2f 6f 75 74 3e 0a  "$var2"/></out>.
5d40: 20 20 20 20 20 20 20 20 3c 2f 78 73 6c 3a 74 65          </xsl:te
5d50: 6d 70 6c 61 74 65 3e 0a 20 20 20 20 20 20 20 20  mplate>.        
5d60: 3c 2f 78 73 6c 3a 73 74 79 6c 65 73 68 65 65 74  </xsl:stylesheet
5d70: 3e 7d 5d 0a 20 20 20 20 24 78 6d 6c 20 78 73 6c  >}].    $xml xsl
5d80: 74 20 24 78 73 6c 74 20 72 65 73 75 6c 74 44 6f  t $xslt resultDo
5d90: 63 0a 20 20 20 20 73 65 74 20 72 65 73 75 6c 74  c.    set result
5da0: 20 5b 24 72 65 73 75 6c 74 44 6f 63 20 61 73 58   [$resultDoc asX
5db0: 4d 4c 20 2d 69 6e 64 65 6e 74 20 6e 6f 6e 65 5d  ML -indent none]
5dc0: 0a 20 20 20 20 24 72 65 73 75 6c 74 44 6f 63 20  .    $resultDoc 
5dd0: 64 65 6c 65 74 65 0a 20 20 20 20 24 78 6d 6c 20  delete.    $xml 
5de0: 64 65 6c 65 74 65 0a 20 20 20 20 24 78 73 6c 74  delete.    $xslt
5df0: 20 64 65 6c 65 74 65 0a 20 20 20 20 73 65 74 20   delete.    set 
5e00: 72 65 73 75 6c 74 0a 7d 20 7b 3c 6f 75 74 3e 76  result.} {<out>v
5e10: 61 72 31 56 61 6c 75 65 3c 2f 6f 75 74 3e 7d 0a  ar1Value</out>}.
5e20: 0a 74 65 73 74 20 78 73 6c 74 2d 34 2e 31 20 7b  .test xslt-4.1 {
5e30: 78 73 6c 74 20 74 72 61 6e 73 66 6f 72 6d 61 74  xslt transformat
5e40: 69 6f 6e 20 6f 66 20 61 20 73 6f 75 72 63 65 20  ion of a source 
5e50: 77 68 69 63 68 20 77 61 73 20 6d 6f 64 69 66 65  which was modife
5e60: 64 20 61 66 74 65 72 20 70 61 72 73 69 6e 67 7d  d after parsing}
5e70: 20 7b 0a 20 20 20 20 64 6f 6d 20 70 61 72 73 65   {.    dom parse
5e80: 20 2d 62 61 73 65 75 72 6c 20 66 69 6c 65 3a 2f   -baseurl file:/
5e90: 2f 2f 74 6d 70 2f 61 62 63 2e 78 6d 6c 20 7b 3c  //tmp/abc.xml {<
5ea0: 74 65 73 74 2f 3e 7d 20 64 6f 63 0a 20 20 20 20  test/>} doc.    
5eb0: 24 64 6f 63 20 64 6f 63 75 6d 65 6e 74 45 6c 65  $doc documentEle
5ec0: 6d 65 6e 74 20 72 6f 6f 74 0a 20 20 20 20 24 72  ment root.    $r
5ed0: 6f 6f 74 20 61 70 70 65 6e 64 58 4d 4c 20 3c 63  oot appendXML <c
5ee0: 68 69 6c 64 2f 3e 0a 20 20 20 20 64 6f 6d 20 70  hild/>.    dom p
5ef0: 61 72 73 65 20 7b 3c 78 73 6c 3a 73 74 79 6c 65  arse {<xsl:style
5f00: 73 68 65 65 74 20 0a 20 20 20 20 76 65 72 73 69  sheet .    versi
5f10: 6f 6e 3d 22 31 2e 30 22 20 0a 20 20 20 20 78 6d  on="1.0" .    xm
5f20: 6c 6e 73 3a 78 73 6c 3d 22 68 74 74 70 3a 2f 2f  lns:xsl="http://
5f30: 77 77 77 2e 77 33 2e 6f 72 67 2f 31 39 39 39 2f  www.w3.org/1999/
5f40: 58 53 4c 2f 54 72 61 6e 73 66 6f 72 6d 22 3e 0a  XSL/Transform">.
5f50: 20 20 20 20 3c 78 73 6c 3a 74 65 6d 70 6c 61 74      <xsl:templat
5f60: 65 20 6d 61 74 63 68 3d 22 2f 22 3e 0a 20 20 20  e match="/">.   
5f70: 20 3c 78 73 6c 3a 63 6f 70 79 2d 6f 66 20 73 65   <xsl:copy-of se
5f80: 6c 65 63 74 3d 22 2e 22 2f 3e 0a 20 20 20 20 3c  lect="."/>.    <
5f90: 2f 78 73 6c 3a 74 65 6d 70 6c 61 74 65 3e 0a 20  /xsl:template>. 
5fa0: 20 20 20 3c 2f 78 73 6c 3a 73 74 79 6c 65 73 68     </xsl:stylesh
5fb0: 65 65 74 3e 7d 20 78 73 6c 44 6f 63 0a 20 20 20  eet>} xslDoc.   
5fc0: 20 0a 20 20 20 20 24 72 6f 6f 74 20 78 73 6c 74   .    $root xslt
5fd0: 20 24 78 73 6c 44 6f 63 20 6e 65 77 44 6f 63 0a   $xslDoc newDoc.
5fe0: 20 20 20 20 73 65 74 20 72 65 73 75 6c 74 20 5b      set result [
5ff0: 24 6e 65 77 44 6f 63 20 61 73 58 4d 4c 20 2d 69  $newDoc asXML -i
6000: 6e 64 65 6e 74 20 6e 6f 6e 65 5d 0a 20 20 20 20  ndent none].    
6010: 24 64 6f 63 20 64 65 6c 65 74 65 0a 20 20 20 20  $doc delete.    
6020: 24 78 73 6c 44 6f 63 20 64 65 6c 65 74 65 0a 20  $xslDoc delete. 
6030: 20 20 20 24 6e 65 77 44 6f 63 20 64 65 6c 65 74     $newDoc delet
6040: 65 0a 20 20 20 20 73 65 74 20 72 65 73 75 6c 74  e.    set result
6050: 0a 7d 20 7b 3c 74 65 73 74 3e 3c 63 68 69 6c 64  .} {<test><child
6060: 2f 3e 3c 2f 74 65 73 74 3e 7d 0a 0a 73 65 74 20  /></test>}..set 
6070: 78 73 6c 74 20 7b 0a 20 20 20 20 3c 78 73 6c 3a  xslt {.    <xsl:
6080: 73 74 79 6c 65 73 68 65 65 74 0a 20 20 20 20 20  stylesheet.     
6090: 20 76 65 72 73 69 6f 6e 3d 22 31 2e 30 22 20 0a   version="1.0" .
60a0: 20 20 20 20 20 20 65 78 63 6c 75 64 65 2d 72 65        exclude-re
60b0: 73 75 6c 74 2d 70 72 65 66 69 78 65 73 3d 22 6d  sult-prefixes="m
60c0: 79 22 0a 20 20 20 20 20 20 78 6d 6c 6e 73 3a 78  y".      xmlns:x
60d0: 73 6c 3d 22 68 74 74 70 3a 2f 2f 77 77 77 2e 77  sl="http://www.w
60e0: 33 2e 6f 72 67 2f 31 39 39 39 2f 58 53 4c 2f 54  3.org/1999/XSL/T
60f0: 72 61 6e 73 66 6f 72 6d 22 0a 20 20 20 20 20 20  ransform".      
6100: 0a 20 20 20 20 20 20 78 6d 6c 6e 73 3a 6d 79 3d  .      xmlns:my=
6110: 22 68 74 74 70 3a 2f 2f 6d 79 2e 64 61 74 61 22  "http://my.data"
6120: 3e 0a 20 20 20 20 20 20 0a 20 20 20 20 20 20 3c  >.      .      <
6130: 78 73 6c 3a 74 65 6d 70 6c 61 74 65 20 6d 61 74  xsl:template mat
6140: 63 68 3d 22 2f 22 3e 0a 20 20 20 20 20 20 20 20  ch="/">.        
6150: 3c 6f 75 74 3e 3c 78 73 6c 3a 76 61 6c 75 65 2d  <out><xsl:value-
6160: 6f 66 20 73 65 6c 65 63 74 3d 22 64 6f 63 75 6d  of select="docum
6170: 65 6e 74 28 27 27 29 2f 2a 2f 6d 79 3a 64 61 74  ent('')/*/my:dat
6180: 61 22 2f 3e 3c 2f 6f 75 74 3e 0a 20 20 20 20 20  a"/></out>.     
6190: 20 3c 2f 78 73 6c 3a 74 65 6d 70 6c 61 74 65 3e   </xsl:template>
61a0: 0a 0a 20 20 20 20 20 20 3c 6d 79 3a 64 61 74 61  ..      <my:data
61b0: 3e 44 61 74 61 20 73 74 6f 72 65 64 20 69 6e 20  >Data stored in 
61c0: 74 68 65 20 73 74 79 6c 65 73 68 65 65 74 3c 2f  the stylesheet</
61d0: 6d 79 3a 64 61 74 61 3e 0a 20 20 20 20 0a 20 20  my:data>.    .  
61e0: 20 20 3c 2f 78 73 6c 3a 73 74 79 6c 65 73 68 65    </xsl:styleshe
61f0: 65 74 3e 7d 0a 0a 70 72 6f 63 20 35 2e 31 2d 65  et>}..proc 5.1-e
6200: 78 74 72 65 66 20 7b 62 61 73 65 55 52 49 20 73  xtref {baseURI s
6210: 79 73 74 65 6d 49 64 20 70 75 62 6c 69 63 49 64  ystemId publicId
6220: 7d 20 7b 0a 20 20 20 20 69 66 20 7b 24 62 61 73  } {.    if {$bas
6230: 65 55 52 49 20 21 3d 20 22 22 7d 20 7b 0a 20 20  eURI != ""} {.  
6240: 20 20 20 20 20 20 65 72 72 6f 72 20 22 62 61 73        error "bas
6250: 65 55 52 49 20 6e 6f 74 20 65 6d 70 74 79 22 0a  eURI not empty".
6260: 20 20 20 20 7d 0a 20 20 20 20 69 66 20 7b 24 73      }.    if {$s
6270: 79 73 74 65 6d 49 64 20 21 3d 20 22 22 7d 20 7b  ystemId != ""} {
6280: 0a 20 20 20 20 20 20 20 20 65 72 72 6f 72 20 22  .        error "
6290: 73 79 73 74 65 6d 49 64 20 6e 6f 74 20 65 6d 70  systemId not emp
62a0: 74 79 22 0a 20 20 20 20 7d 0a 20 20 20 20 72 65  ty".    }.    re
62b0: 74 75 72 6e 20 5b 6c 69 73 74 20 73 74 72 69 6e  turn [list strin
62c0: 67 20 22 22 20 24 3a 3a 78 73 6c 74 5d 0a 7d 0a  g "" $::xslt].}.
62d0: 0a 74 65 73 74 20 78 73 6c 74 2d 35 2e 31 20 7b  .test xslt-5.1 {
62e0: 78 73 6c 74 20 64 6f 63 75 6d 65 6e 74 28 27 27  xslt document(''
62f0: 29 20 77 69 74 68 20 65 6d 70 74 79 20 62 61 73  ) with empty bas
6300: 65 55 52 49 7d 20 7b 0a 20 20 20 20 64 6f 6d 20  eURI} {.    dom 
6310: 70 61 72 73 65 20 3c 64 6f 6e 74 4d 61 74 74 65  parse <dontMatte
6320: 72 2f 3e 20 78 6d 6c 64 6f 63 0a 20 20 20 20 64  r/> xmldoc.    d
6330: 6f 6d 20 70 61 72 73 65 20 2d 65 78 74 65 72 6e  om parse -extern
6340: 61 6c 65 6e 74 69 74 79 63 6f 6d 6d 61 6e 64 20  alentitycommand 
6350: 35 2e 31 2d 65 78 74 72 65 66 20 24 78 73 6c 74  5.1-extref $xslt
6360: 20 78 73 6c 74 64 6f 63 0a 20 20 20 20 24 78 6d   xsltdoc.    $xm
6370: 6c 64 6f 63 20 78 73 6c 74 20 24 78 73 6c 74 64  ldoc xslt $xsltd
6380: 6f 63 20 72 65 73 75 6c 74 44 6f 63 0a 20 20 20  oc resultDoc.   
6390: 20 73 65 74 20 72 65 73 75 6c 74 20 5b 24 72 65   set result [$re
63a0: 73 75 6c 74 44 6f 63 20 61 73 58 4d 4c 20 2d 69  sultDoc asXML -i
63b0: 6e 64 65 6e 74 20 6e 6f 6e 65 5d 0a 20 20 20 20  ndent none].    
63c0: 24 72 65 73 75 6c 74 44 6f 63 20 64 65 6c 65 74  $resultDoc delet
63d0: 65 0a 20 20 20 20 24 78 73 6c 74 64 6f 63 20 64  e.    $xsltdoc d
63e0: 65 6c 65 74 65 0a 20 20 20 20 24 78 6d 6c 64 6f  elete.    $xmldo
63f0: 63 20 64 65 6c 65 74 65 0a 20 20 20 20 73 65 74  c delete.    set
6400: 20 72 65 73 75 6c 74 0a 7d 20 7b 3c 6f 75 74 3e   result.} {<out>
6410: 44 61 74 61 20 73 74 6f 72 65 64 20 69 6e 20 74  Data stored in t
6420: 68 65 20 73 74 79 6c 65 73 68 65 65 74 3c 2f 6f  he stylesheet</o
6430: 75 74 3e 7d 0a 0a 70 72 6f 63 20 78 73 6c 74 2d  ut>}..proc xslt-
6440: 35 2e 32 20 7b 61 72 67 73 7d 20 7b 0a 20 20 20  5.2 {args} {.   
6450: 20 65 72 72 6f 72 20 22 73 63 72 69 70 74 20 65   error "script e
6460: 72 72 6f 72 20 69 6e 20 78 73 6c 74 2d 35 2e 32  rror in xslt-5.2
6470: 20 65 78 74 65 72 6e 61 6c 20 65 6e 69 74 69 74   external enitit
6480: 79 20 72 65 73 6f 6c 76 65 72 22 0a 7d 0a 0a 73  y resolver".}..s
6490: 65 74 20 78 73 6c 74 20 7b 0a 20 20 20 20 3c 78  et xslt {.    <x
64a0: 73 6c 3a 73 74 79 6c 65 73 68 65 65 74 0a 20 20  sl:stylesheet.  
64b0: 20 20 20 20 76 65 72 73 69 6f 6e 3d 22 31 2e 30      version="1.0
64c0: 22 20 0a 20 20 20 20 20 20 78 6d 6c 6e 73 3a 78  " .      xmlns:x
64d0: 73 6c 3d 22 68 74 74 70 3a 2f 2f 77 77 77 2e 77  sl="http://www.w
64e0: 33 2e 6f 72 67 2f 31 39 39 39 2f 58 53 4c 2f 54  3.org/1999/XSL/T
64f0: 72 61 6e 73 66 6f 72 6d 22 3e 0a 20 20 20 20 20  ransform">.     
6500: 20 0a 20 20 20 20 20 20 3c 78 73 6c 3a 74 65 6d   .      <xsl:tem
6510: 70 6c 61 74 65 20 6d 61 74 63 68 3d 22 2f 22 3e  plate match="/">
6520: 0a 20 20 20 20 20 20 20 20 3c 6f 75 74 3e 3c 78  .        <out><x
6530: 73 6c 3a 76 61 6c 75 65 2d 6f 66 20 73 65 6c 65  sl:value-of sele
6540: 63 74 3d 22 64 6f 63 75 6d 65 6e 74 28 27 66 6f  ct="document('fo
6550: 6f 27 29 2f 2a 22 2f 3e 3c 2f 6f 75 74 3e 0a 20  o')/*"/></out>. 
6560: 20 20 20 20 20 3c 2f 78 73 6c 3a 74 65 6d 70 6c       </xsl:templ
6570: 61 74 65 3e 0a 20 20 20 20 3c 2f 78 73 6c 3a 73  ate>.    </xsl:s
6580: 74 79 6c 65 73 68 65 65 74 3e 7d 0a 0a 74 65 73  tylesheet>}..tes
6590: 74 20 78 73 6c 74 2d 35 2e 32 20 7b 78 73 6c 74  t xslt-5.2 {xslt
65a0: 20 64 6f 63 75 6d 65 6e 74 28 29 20 77 69 74 68   document() with
65b0: 20 73 63 72 69 70 74 20 65 72 72 6f 72 20 69 6e   script error in
65c0: 20 2d 65 78 74 65 72 6e 61 6c 65 6e 74 69 74 79   -externalentity
65d0: 63 6f 6d 6d 61 6e 64 7d 20 7b 0a 20 20 20 20 64  command} {.    d
65e0: 6f 6d 20 70 61 72 73 65 20 3c 64 6f 6e 74 4d 61  om parse <dontMa
65f0: 74 74 65 72 2f 3e 20 78 6d 6c 64 6f 63 0a 20 20  tter/> xmldoc.  
6600: 20 20 64 6f 6d 20 70 61 72 73 65 20 2d 65 78 74    dom parse -ext
6610: 65 72 6e 61 6c 65 6e 74 69 74 79 63 6f 6d 6d 61  ernalentitycomma
6620: 6e 64 20 78 73 6c 74 2d 35 2e 32 20 24 78 73 6c  nd xslt-5.2 $xsl
6630: 74 20 78 73 6c 74 64 6f 63 0a 20 20 20 20 73 65  t xsltdoc.    se
6640: 74 20 72 65 73 75 6c 74 20 5b 63 61 74 63 68 20  t result [catch 
6650: 7b 24 78 6d 6c 64 6f 63 20 78 73 6c 74 20 24 78  {$xmldoc xslt $x
6660: 73 6c 74 64 6f 63 20 72 65 73 75 6c 74 44 6f 63  sltdoc resultDoc
6670: 7d 20 65 72 72 4d 73 67 5d 0a 20 20 20 20 24 78  } errMsg].    $x
6680: 6d 6c 64 6f 63 20 64 65 6c 65 74 65 0a 20 20 20  mldoc delete.   
6690: 20 24 78 73 6c 74 64 6f 63 20 64 65 6c 65 74 65   $xsltdoc delete
66a0: 0a 20 20 20 20 6c 61 70 70 65 6e 64 20 72 65 73  .    lappend res
66b0: 75 6c 74 20 24 65 72 72 4d 73 67 0a 7d 20 7b 31  ult $errMsg.} {1
66c0: 20 7b 73 63 72 69 70 74 20 65 72 72 6f 72 20 69   {script error i
66d0: 6e 20 78 73 6c 74 2d 35 2e 32 20 65 78 74 65 72  n xslt-5.2 exter
66e0: 6e 61 6c 20 65 6e 69 74 69 74 79 20 72 65 73 6f  nal enitity reso
66f0: 6c 76 65 72 7d 7d 0a 20 20 20 20 0a 70 72 6f 63  lver}}.    .proc
6700: 20 78 73 6c 74 2d 35 2e 33 20 7b 61 72 67 73 7d   xslt-5.3 {args}
6710: 20 7b 0a 20 20 20 20 72 65 74 75 72 6e 20 5b 6c   {.    return [l
6720: 69 73 74 20 73 74 72 69 6e 67 20 66 69 6c 65 3a  ist string file:
6730: 2f 2f 73 6f 6d 65 2f 62 61 73 65 20 22 3c 6e 6f  //some/base "<no
6740: 74 2d 77 65 6c 6c 66 6f 72 6d 65 64 3c 22 5d 0a  t-wellformed<"].
6750: 7d 0a 0a 74 65 73 74 20 78 73 6c 74 2d 35 2e 33  }..test xslt-5.3
6760: 20 7b 78 73 6c 74 20 64 6f 63 75 6d 65 6e 74 28   {xslt document(
6770: 29 20 77 69 74 68 20 73 63 72 69 70 74 20 65 72  ) with script er
6780: 72 6f 72 20 69 6e 20 2d 65 78 74 65 72 6e 61 6c  ror in -external
6790: 65 6e 74 69 74 79 63 6f 6d 6d 61 6e 64 7d 20 7b  entitycommand} {
67a0: 0a 20 20 20 20 64 6f 6d 20 70 61 72 73 65 20 3c  .    dom parse <
67b0: 64 6f 6e 74 4d 61 74 74 65 72 2f 3e 20 78 6d 6c  dontMatter/> xml
67c0: 64 6f 63 0a 20 20 20 20 64 6f 6d 20 70 61 72 73  doc.    dom pars
67d0: 65 20 2d 65 78 74 65 72 6e 61 6c 65 6e 74 69 74  e -externalentit
67e0: 79 63 6f 6d 6d 61 6e 64 20 78 73 6c 74 2d 35 2e  ycommand xslt-5.
67f0: 33 20 24 78 73 6c 74 20 78 73 6c 74 64 6f 63 0a  3 $xslt xsltdoc.
6800: 20 20 20 20 73 65 74 20 72 65 73 75 6c 74 20 5b      set result [
6810: 63 61 74 63 68 20 7b 24 78 6d 6c 64 6f 63 20 78  catch {$xmldoc x
6820: 73 6c 74 20 24 78 73 6c 74 64 6f 63 20 72 65 73  slt $xsltdoc res
6830: 75 6c 74 44 6f 63 7d 20 65 72 72 4d 73 67 5d 0a  ultDoc} errMsg].
6840: 20 20 20 20 24 78 6d 6c 64 6f 63 20 64 65 6c 65      $xmldoc dele
6850: 74 65 0a 20 20 20 20 24 78 73 6c 74 64 6f 63 20  te.    $xsltdoc 
6860: 64 65 6c 65 74 65 0a 20 20 20 20 6c 61 70 70 65  delete.    lappe
6870: 6e 64 20 72 65 73 75 6c 74 20 24 65 72 72 4d 73  nd result $errMs
6880: 67 0a 7d 20 7b 31 20 7b 45 72 72 6f 72 20 77 68  g.} {1 {Error wh
6890: 69 6c 65 20 70 72 6f 63 65 73 73 69 6e 67 20 65  ile processing e
68a0: 78 74 65 72 6e 61 6c 20 65 6e 74 69 74 79 20 22  xternal entity "
68b0: 66 6f 6f 22 3a 0a 41 74 20 6c 69 6e 65 20 31 20  foo":.At line 1 
68c0: 63 68 61 72 61 63 74 65 72 20 31 35 3a 20 6e 6f  character 15: no
68d0: 74 20 77 65 6c 6c 2d 66 6f 72 6d 65 64 20 28 69  t well-formed (i
68e0: 6e 76 61 6c 69 64 20 74 6f 6b 65 6e 29 7d 7d 0a  nvalid token)}}.
68f0: 0a 70 72 6f 63 20 78 73 6c 74 2d 35 2e 34 20 7b  .proc xslt-5.4 {
6900: 62 61 73 65 20 73 79 73 74 65 6d 49 64 20 70 75  base systemId pu
6910: 62 6c 69 63 49 64 7d 20 7b 0a 20 20 20 20 0a 20  blicId} {.    . 
6920: 20 20 20 73 77 69 74 63 68 20 24 73 79 73 74 65     switch $syste
6930: 6d 49 64 20 7b 0a 20 20 20 20 20 20 20 20 22 66  mId {.        "f
6940: 69 72 73 74 6c 65 76 65 6c 22 20 7b 0a 20 20 20  irstlevel" {.   
6950: 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
6960: 5b 6c 69 73 74 20 73 74 72 69 6e 67 20 66 69 6c  [list string fil
6970: 65 3a 2f 2f 73 6f 6d 65 2f 62 61 73 65 2f 66 69  e://some/base/fi
6980: 72 73 74 20 7b 0a 20 20 20 20 20 20 20 20 20 20  rst {.          
6990: 20 20 20 20 20 20 3c 78 73 6c 3a 73 74 79 6c 65        <xsl:style
69a0: 73 68 65 65 74 0a 20 20 20 20 20 20 20 20 20 20  sheet.          
69b0: 20 20 20 20 20 20 20 20 76 65 72 73 69 6f 6e 3d          version=
69c0: 22 31 2e 30 22 20 0a 20 20 20 20 20 20 20 20 20  "1.0" .         
69d0: 20 20 20 20 20 20 20 20 20 78 6d 6c 6e 73 3a 78           xmlns:x
69e0: 73 6c 3d 22 68 74 74 70 3a 2f 2f 77 77 77 2e 77  sl="http://www.w
69f0: 33 2e 6f 72 67 2f 31 39 39 39 2f 58 53 4c 2f 54  3.org/1999/XSL/T
6a00: 72 61 6e 73 66 6f 72 6d 22 3e 0a 20 20 20 20 20  ransform">.     
6a10: 20 20 20 20 20 20 20 20 20 20 20 0a 20 20 20 20             .    
6a20: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 3c 78                <x
6a30: 73 6c 3a 69 6d 70 6f 72 74 20 68 72 65 66 3d 22  sl:import href="
6a40: 73 65 63 6f 6e 64 6c 65 76 65 6c 22 2f 3e 0a 20  secondlevel"/>. 
6a50: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 0a                 .
6a60: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
6a70: 20 20 3c 78 73 6c 3a 74 65 6d 70 6c 61 74 65 20    <xsl:template 
6a80: 6d 61 74 63 68 3d 22 66 6f 6f 22 3e 0a 20 20 20  match="foo">.   
6a90: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
6aa0: 20 3c 6f 75 74 3e 3c 78 73 6c 3a 76 61 6c 75 65   <out><xsl:value
6ab0: 2d 6f 66 20 73 65 6c 65 63 74 3d 22 2e 22 2f 3e  -of select="."/>
6ac0: 3c 2f 6f 75 74 3e 0a 20 20 20 20 20 20 20 20 20  </out>.         
6ad0: 20 20 20 20 20 20 20 20 20 3c 2f 78 73 6c 3a 74           </xsl:t
6ae0: 65 6d 70 6c 61 74 65 3e 0a 20 20 20 20 20 20 20  emplate>.       
6af0: 20 20 20 20 20 20 20 20 20 3c 2f 78 73 6c 3a 73           </xsl:s
6b00: 74 79 6c 65 73 68 65 65 74 3e 7d 5d 0a 0a 20 20  tylesheet>}]..  
6b10: 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20        }.        
6b20: 22 73 65 63 6f 6e 64 6c 65 76 65 6c 22 20 7b 0a  "secondlevel" {.
6b30: 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75              retu
6b40: 72 6e 20 5b 6c 69 73 74 20 73 74 72 69 6e 67 20  rn [list string 
6b50: 66 69 6c 65 3a 2f 2f 73 6f 6d 65 2f 62 61 73 65  file://some/base
6b60: 2f 73 65 63 6f 6e 64 20 22 3c 6e 6f 74 2d 77 65  /second "<not-we
6b70: 6c 6c 66 6f 72 6d 65 64 3c 22 5d 0a 20 20 20 20  llformed<"].    
6b80: 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20 64 65      }.        de
6b90: 66 61 75 6c 74 20 7b 0a 20 20 20 20 20 20 20 20  fault {.        
6ba0: 20 20 20 20 65 72 72 6f 72 20 22 65 72 72 6f 72      error "error
6bb0: 20 77 69 74 68 69 6e 20 74 68 65 20 74 65 73 74   within the test
6bc0: 22 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20  ".        }.    
6bd0: 7d 0a 7d 0a 0a 73 65 74 20 78 73 6c 74 20 7b 0a  }.}..set xslt {.
6be0: 20 20 20 20 3c 78 73 6c 3a 73 74 79 6c 65 73 68      <xsl:stylesh
6bf0: 65 65 74 0a 20 20 20 20 20 20 76 65 72 73 69 6f  eet.      versio
6c00: 6e 3d 22 31 2e 30 22 20 0a 20 20 20 20 20 20 78  n="1.0" .      x
6c10: 6d 6c 6e 73 3a 78 73 6c 3d 22 68 74 74 70 3a 2f  mlns:xsl="http:/
6c20: 2f 77 77 77 2e 77 33 2e 6f 72 67 2f 31 39 39 39  /www.w3.org/1999
6c30: 2f 58 53 4c 2f 54 72 61 6e 73 66 6f 72 6d 22 3e  /XSL/Transform">
6c40: 0a 0a 20 20 20 20 20 20 3c 78 73 6c 3a 69 6d 70  ..      <xsl:imp
6c50: 6f 72 74 20 68 72 65 66 3d 22 66 69 72 73 74 6c  ort href="firstl
6c60: 65 76 65 6c 22 2f 3e 0a 0a 20 20 20 20 20 20 3c  evel"/>..      <
6c70: 78 73 6c 3a 74 65 6d 70 6c 61 74 65 20 6d 61 74  xsl:template mat
6c80: 63 68 3d 22 2f 22 3e 0a 20 20 20 20 20 20 20 20  ch="/">.        
6c90: 3c 6f 75 74 3e 66 6f 6f 3c 2f 6f 75 74 3e 0a 20  <out>foo</out>. 
6ca0: 20 20 20 20 20 3c 2f 78 73 6c 3a 74 65 6d 70 6c       </xsl:templ
6cb0: 61 74 65 3e 0a 20 20 20 20 3c 2f 78 73 6c 3a 73  ate>.    </xsl:s
6cc0: 74 79 6c 65 73 68 65 65 74 3e 7d 0a 0a 74 65 73  tylesheet>}..tes
6cd0: 74 20 78 73 6c 74 2d 35 2e 34 20 7b 78 73 6c 74  t xslt-5.4 {xslt
6ce0: 20 64 6f 63 75 6d 65 6e 74 28 29 20 77 69 74 68   document() with
6cf0: 20 73 63 72 69 70 74 20 65 72 72 6f 72 20 69 6e   script error in
6d00: 20 2d 65 78 74 65 72 6e 61 6c 65 6e 74 69 74 79   -externalentity
6d10: 63 6f 6d 6d 61 6e 64 7d 20 7b 0a 20 20 20 20 64  command} {.    d
6d20: 6f 6d 20 70 61 72 73 65 20 3c 64 6f 6e 74 4d 61  om parse <dontMa
6d30: 74 74 65 72 2f 3e 20 78 6d 6c 64 6f 63 0a 20 20  tter/> xmldoc.  
6d40: 20 20 64 6f 6d 20 70 61 72 73 65 20 2d 65 78 74    dom parse -ext
6d50: 65 72 6e 61 6c 65 6e 74 69 74 79 63 6f 6d 6d 61  ernalentitycomma
6d60: 6e 64 20 78 73 6c 74 2d 35 2e 34 20 24 78 73 6c  nd xslt-5.4 $xsl
6d70: 74 20 78 73 6c 74 64 6f 63 0a 20 20 20 20 73 65  t xsltdoc.    se
6d80: 74 20 72 65 73 75 6c 74 20 5b 63 61 74 63 68 20  t result [catch 
6d90: 7b 24 78 6d 6c 64 6f 63 20 78 73 6c 74 20 24 78  {$xmldoc xslt $x
6da0: 73 6c 74 64 6f 63 20 72 65 73 75 6c 74 44 6f 63  sltdoc resultDoc
6db0: 7d 20 65 72 72 4d 73 67 5d 0a 20 20 20 20 24 78  } errMsg].    $x
6dc0: 6d 6c 64 6f 63 20 64 65 6c 65 74 65 0a 20 20 20  mldoc delete.   
6dd0: 20 24 78 73 6c 74 64 6f 63 20 64 65 6c 65 74 65   $xsltdoc delete
6de0: 0a 20 20 20 20 6c 61 70 70 65 6e 64 20 72 65 73  .    lappend res
6df0: 75 6c 74 20 24 65 72 72 4d 73 67 0a 7d 20 7b 31  ult $errMsg.} {1
6e00: 20 7b 45 72 72 6f 72 20 77 68 69 6c 65 20 70 72   {Error while pr
6e10: 6f 63 65 73 73 69 6e 67 20 65 78 74 65 72 6e 61  ocessing externa
6e20: 6c 20 65 6e 74 69 74 79 20 22 73 65 63 6f 6e 64  l entity "second
6e30: 6c 65 76 65 6c 22 3a 0a 41 74 20 6c 69 6e 65 20  level":.At line 
6e40: 31 20 63 68 61 72 61 63 74 65 72 20 31 35 3a 20  1 character 15: 
6e50: 6e 6f 74 20 77 65 6c 6c 2d 66 6f 72 6d 65 64 20  not well-formed 
6e60: 28 69 6e 76 61 6c 69 64 20 74 6f 6b 65 6e 29 7d  (invalid token)}
6e70: 7d 0a 0a 73 65 74 20 78 73 6c 74 20 7b 0a 20 20  }..set xslt {.  
6e80: 20 20 3c 78 73 6c 3a 73 74 79 6c 65 73 68 65 65    <xsl:styleshee
6e90: 74 0a 20 20 20 20 20 20 76 65 72 73 69 6f 6e 3d  t.      version=
6ea0: 22 31 2e 30 22 20 0a 20 20 20 20 20 20 78 6d 6c  "1.0" .      xml
6eb0: 6e 73 3a 78 73 6c 3d 22 68 74 74 70 3a 2f 2f 77  ns:xsl="http://w
6ec0: 77 77 2e 77 33 2e 6f 72 67 2f 31 39 39 39 2f 58  ww.w3.org/1999/X
6ed0: 53 4c 2f 54 72 61 6e 73 66 6f 72 6d 22 3e 0a 0a  SL/Transform">..
6ee0: 20 20 20 20 20 20 3c 78 73 6c 3a 69 6d 70 6f 72        <xsl:impor
6ef0: 74 20 68 72 65 66 3d 22 22 2f 3e 0a 0a 20 20 20  t href=""/>..   
6f00: 20 20 20 3c 78 73 6c 3a 74 65 6d 70 6c 61 74 65     <xsl:template
6f10: 20 6d 61 74 63 68 3d 22 2f 22 3e 0a 20 20 20 20   match="/">.    
6f20: 20 20 20 20 3c 6f 75 74 3e 66 6f 6f 3c 2f 6f 75      <out>foo</ou
6f30: 74 3e 0a 20 20 20 20 20 20 3c 2f 78 73 6c 3a 74  t>.      </xsl:t
6f40: 65 6d 70 6c 61 74 65 3e 0a 20 20 20 20 3c 2f 78  emplate>.    </x
6f50: 73 6c 3a 73 74 79 6c 65 73 68 65 65 74 3e 7d 0a  sl:stylesheet>}.
6f60: 0a 74 65 73 74 20 78 73 6c 74 2d 35 2e 35 20 7b  .test xslt-5.5 {
6f70: 78 73 6c 3a 69 6d 70 6f 72 74 20 68 72 65 66 20  xsl:import href 
6f80: 3d 3d 20 22 22 7d 20 7b 0a 20 20 20 20 64 6f 6d  == ""} {.    dom
6f90: 20 70 61 72 73 65 20 3c 64 6f 6e 74 4d 61 74 74   parse <dontMatt
6fa0: 65 72 2f 3e 20 78 6d 6c 64 6f 63 0a 20 20 20 20  er/> xmldoc.    
6fb0: 64 6f 6d 20 70 61 72 73 65 20 2d 65 78 74 65 72  dom parse -exter
6fc0: 6e 61 6c 65 6e 74 69 74 79 63 6f 6d 6d 61 6e 64  nalentitycommand
6fd0: 20 78 73 6c 74 2d 35 2e 34 20 24 78 73 6c 74 20   xslt-5.4 $xslt 
6fe0: 78 73 6c 74 64 6f 63 0a 20 20 20 20 73 65 74 20  xsltdoc.    set 
6ff0: 72 65 73 75 6c 74 20 5b 63 61 74 63 68 20 7b 24  result [catch {$
7000: 78 6d 6c 64 6f 63 20 78 73 6c 74 20 24 78 73 6c  xmldoc xslt $xsl
7010: 74 64 6f 63 20 72 65 73 75 6c 74 44 6f 63 7d 20  tdoc resultDoc} 
7020: 65 72 72 4d 73 67 5d 0a 20 20 20 20 24 78 6d 6c  errMsg].    $xml
7030: 64 6f 63 20 64 65 6c 65 74 65 0a 20 20 20 20 24  doc delete.    $
7040: 78 73 6c 74 64 6f 63 20 64 65 6c 65 74 65 0a 20  xsltdoc delete. 
7050: 20 20 20 6c 61 70 70 65 6e 64 20 72 65 73 75 6c     lappend resul
7060: 74 20 24 65 72 72 4d 73 67 0a 7d 20 7b 31 20 7b  t $errMsg.} {1 {
7070: 52 65 63 75 72 73 69 76 65 20 69 6d 70 6f 72 74  Recursive import
7080: 2f 69 6e 63 6c 75 64 65 3a 20 73 74 79 6c 65 73  /include: styles
7090: 68 65 65 74 20 74 72 69 65 73 20 74 6f 20 61 63  heet tries to ac
70a0: 63 65 73 73 20 69 74 73 65 6c 66 2e 7d 7d 0a 0a  cess itself.}}..
70b0: 73 65 74 20 78 73 6c 74 20 7b 0a 20 20 20 20 3c  set xslt {.    <
70c0: 78 73 6c 3a 73 74 79 6c 65 73 68 65 65 74 0a 20  xsl:stylesheet. 
70d0: 20 20 20 20 20 76 65 72 73 69 6f 6e 3d 22 31 2e       version="1.
70e0: 30 22 20 0a 20 20 20 20 20 20 78 6d 6c 6e 73 3a  0" .      xmlns:
70f0: 78 73 6c 3d 22 68 74 74 70 3a 2f 2f 77 77 77 2e  xsl="http://www.
7100: 77 33 2e 6f 72 67 2f 31 39 39 39 2f 58 53 4c 2f  w3.org/1999/XSL/
7110: 54 72 61 6e 73 66 6f 72 6d 22 3e 0a 20 20 20 20  Transform">.    
7120: 0a 20 20 20 20 3c 78 73 6c 3a 6f 75 74 70 75 74  .    <xsl:output
7130: 0a 20 20 20 20 20 20 69 6e 64 65 6e 74 3d 22 79  .      indent="y
7140: 65 73 22 0a 20 20 20 20 20 20 6f 6d 69 74 2d 78  es".      omit-x
7150: 6d 6c 2d 64 65 63 6c 61 72 61 74 69 6f 6e 3d 22  ml-declaration="
7160: 6e 6f 22 0a 20 20 20 20 20 20 6d 65 74 68 6f 64  no".      method
7170: 3d 22 74 65 78 74 22 0a 20 20 20 20 20 20 65 6e  ="text".      en
7180: 63 6f 64 69 6e 67 3d 22 49 53 4f 2d 38 38 35 39  coding="ISO-8859
7190: 2d 31 22 0a 20 20 20 20 20 20 73 74 61 6e 64 61  -1".      standa
71a0: 6c 6f 6e 65 3d 22 79 65 73 22 0a 20 20 20 20 20  lone="yes".     
71b0: 20 6d 65 64 69 61 2d 74 79 70 65 3d 22 74 65 78   media-type="tex
71c0: 74 2f 66 6f 6f 22 0a 20 20 20 20 20 20 2f 3e 0a  t/foo".      />.
71d0: 20 20 20 20 0a 20 20 20 20 3c 78 73 6c 3a 74 65      .    <xsl:te
71e0: 6d 70 6c 61 74 65 20 6d 61 74 63 68 3d 22 2f 22  mplate match="/"
71f0: 3e 0a 20 20 20 20 20 20 3c 6f 75 74 2f 3e 0a 20  >.      <out/>. 
7200: 20 20 20 3c 2f 78 73 6c 3a 74 65 6d 70 6c 61 74     </xsl:templat
7210: 65 3e 0a 20 20 20 20 3c 2f 78 73 6c 3a 73 74 79  e>.    </xsl:sty
7220: 6c 65 73 68 65 65 74 3e 0a 7d 0a 0a 74 65 73 74  lesheet>.}..test
7230: 20 78 73 6c 74 2d 36 2e 31 20 7b 78 73 6c 3a 6f   xslt-6.1 {xsl:o
7240: 75 74 70 75 74 7d 20 7b 0a 20 20 20 20 64 6f 6d  utput} {.    dom
7250: 20 70 61 72 73 65 20 3c 64 6f 6e 74 4d 61 74 74   parse <dontMatt
7260: 65 72 2f 3e 20 78 6d 6c 64 6f 63 0a 20 20 20 20  er/> xmldoc.    
7270: 64 6f 6d 20 70 61 72 73 65 20 24 78 73 6c 74 20  dom parse $xslt 
7280: 78 73 6c 74 64 6f 63 0a 20 20 20 20 24 78 6d 6c  xsltdoc.    $xml
7290: 64 6f 63 20 78 73 6c 74 20 24 78 73 6c 74 64 6f  doc xslt $xsltdo
72a0: 63 20 72 65 73 75 6c 74 44 6f 63 0a 20 20 20 20  c resultDoc.    
72b0: 73 65 74 20 72 65 73 75 6c 74 20 5b 24 72 65 73  set result [$res
72c0: 75 6c 74 44 6f 63 20 69 6e 64 65 6e 74 5d 0a 20  ultDoc indent]. 
72d0: 20 20 20 6c 61 70 70 65 6e 64 20 72 65 73 75 6c     lappend resul
72e0: 74 20 5b 24 72 65 73 75 6c 74 44 6f 63 20 6f 6d  t [$resultDoc om
72f0: 69 74 2d 78 6d 6c 2d 64 65 63 6c 61 72 61 74 69  it-xml-declarati
7300: 6f 6e 5d 0a 20 20 20 20 6c 61 70 70 65 6e 64 20  on].    lappend 
7310: 72 65 73 75 6c 74 20 5b 24 72 65 73 75 6c 74 44  result [$resultD
7320: 6f 63 20 65 6e 63 6f 64 69 6e 67 5d 0a 20 20 20  oc encoding].   
7330: 20 6c 61 70 70 65 6e 64 20 72 65 73 75 6c 74 20   lappend result 
7340: 5b 24 72 65 73 75 6c 74 44 6f 63 20 6d 65 64 69  [$resultDoc medi
7350: 61 54 79 70 65 5d 0a 20 20 20 20 6c 61 70 70 65  aType].    lappe
7360: 6e 64 20 72 65 73 75 6c 74 20 5b 24 72 65 73 75  nd result [$resu
7370: 6c 74 44 6f 63 20 73 74 61 6e 64 61 6c 6f 6e 65  ltDoc standalone
7380: 5d 0a 20 20 20 20 6c 61 70 70 65 6e 64 20 72 65  ].    lappend re
7390: 73 75 6c 74 20 5b 24 72 65 73 75 6c 74 44 6f 63  sult [$resultDoc
73a0: 20 67 65 74 44 65 66 61 75 6c 74 4f 75 74 70 75   getDefaultOutpu
73b0: 74 4d 65 74 68 6f 64 5d 0a 20 20 20 20 24 72 65  tMethod].    $re
73c0: 73 75 6c 74 44 6f 63 20 64 65 6c 65 74 65 0a 20  sultDoc delete. 
73d0: 20 20 20 24 78 73 6c 74 64 6f 63 20 64 65 6c 65     $xsltdoc dele
73e0: 74 65 0a 20 20 20 20 24 78 6d 6c 64 6f 63 20 64  te.    $xmldoc d
73f0: 65 6c 65 74 65 0a 20 20 20 20 73 65 74 20 72 65  elete.    set re
7400: 73 75 6c 74 0a 7d 20 7b 31 20 30 20 49 53 4f 2d  sult.} {1 0 ISO-
7410: 38 38 35 39 2d 31 20 74 65 78 74 2f 66 6f 6f 20  8859-1 text/foo 
7420: 31 20 74 65 78 74 7d 0a 0a 0a 73 65 74 20 78 73  1 text}...set xs
7430: 6c 74 20 7b 0a 20 20 20 20 3c 78 73 6c 3a 73 74  lt {.    <xsl:st
7440: 79 6c 65 73 68 65 65 74 0a 20 20 20 20 20 20 76  ylesheet.      v
7450: 65 72 73 69 6f 6e 3d 22 31 2e 30 22 20 0a 20 20  ersion="1.0" .  
7460: 20 20 20 20 78 6d 6c 6e 73 3a 78 73 6c 3d 22 68      xmlns:xsl="h
7470: 74 74 70 3a 2f 2f 77 77 77 2e 77 33 2e 6f 72 67  ttp://www.w3.org
7480: 2f 31 39 39 39 2f 58 53 4c 2f 54 72 61 6e 73 66  /1999/XSL/Transf
7490: 6f 72 6d 22 0a 20 20 20 20 20 20 78 6d 6c 6e 73  orm".      xmlns
74a0: 3a 6d 79 3d 22 68 74 74 70 3a 2f 2f 6d 79 2e 75  :my="http://my.u
74b0: 72 69 22 3e 0a 20 20 20 20 20 20 0a 20 20 20 20  ri">.      .    
74c0: 3c 78 73 6c 3a 74 65 6d 70 6c 61 74 65 20 6d 61  <xsl:template ma
74d0: 74 63 68 3d 22 2f 22 3e 0a 20 20 20 20 20 20 3c  tch="/">.      <
74e0: 6f 75 74 3e 0a 20 20 20 20 20 20 20 20 3c 6d 79  out>.        <my
74f0: 3a 65 6c 65 6d 65 6e 74 2f 3e 0a 20 20 20 20 20  :element/>.     
7500: 20 3c 2f 6f 75 74 3e 0a 20 20 20 20 3c 2f 78 73   </out>.    </xs
7510: 6c 3a 74 65 6d 70 6c 61 74 65 3e 0a 20 20 20 20  l:template>.    
7520: 3c 2f 78 73 6c 3a 73 74 79 6c 65 73 68 65 65 74  </xsl:stylesheet
7530: 3e 7d 0a 0a 74 65 73 74 20 78 73 6c 74 2d 37 2e  >}..test xslt-7.
7540: 31 20 7b 6e 61 6d 65 73 70 61 63 65 73 20 69 6e  1 {namespaces in
7550: 20 74 68 65 20 72 65 73 75 6c 74 20 64 6f 63 7d   the result doc}
7560: 20 7b 0a 20 20 20 20 64 6f 6d 20 70 61 72 73 65   {.    dom parse
7570: 20 3c 64 6f 6e 74 4d 61 74 74 65 72 2f 3e 20 78   <dontMatter/> x
7580: 6d 6c 64 6f 63 0a 20 20 20 20 64 6f 6d 20 70 61  mldoc.    dom pa
7590: 72 73 65 20 24 78 73 6c 74 20 78 73 6c 74 64 6f  rse $xslt xsltdo
75a0: 63 0a 20 20 20 20 24 78 6d 6c 64 6f 63 20 78 73  c.    $xmldoc xs
75b0: 6c 74 20 24 78 73 6c 74 64 6f 63 20 72 65 73 75  lt $xsltdoc resu
75c0: 6c 74 44 6f 63 0a 20 20 20 20 73 65 74 20 6e 6f  ltDoc.    set no
75d0: 64 65 73 20 5b 24 72 65 73 75 6c 74 44 6f 63 20  des [$resultDoc 
75e0: 67 65 74 45 6c 65 6d 65 6e 74 73 42 79 54 61 67  getElementsByTag
75f0: 4e 61 6d 65 4e 53 20 22 68 74 74 70 3a 2f 2f 6d  NameNS "http://m
7600: 79 2e 75 72 69 22 20 65 6c 65 6d 65 6e 74 5d 0a  y.uri" element].
7610: 20 20 20 20 73 65 74 20 72 65 73 75 6c 74 20 22      set result "
7620: 22 0a 20 20 20 20 66 6f 72 65 61 63 68 20 6e 6f  ".    foreach no
7630: 64 65 20 24 6e 6f 64 65 73 20 7b 0a 20 20 20 20  de $nodes {.    
7640: 20 20 20 20 6c 61 70 70 65 6e 64 20 72 65 73 75      lappend resu
7650: 6c 74 20 5b 24 6e 6f 64 65 20 6e 6f 64 65 4e 61  lt [$node nodeNa
7660: 6d 65 5d 0a 20 20 20 20 7d 0a 20 20 20 20 24 72  me].    }.    $r
7670: 65 73 75 6c 74 44 6f 63 20 64 65 6c 65 74 65 0a  esultDoc delete.
7680: 20 20 20 20 24 78 6d 6c 64 6f 63 20 64 65 6c 65      $xmldoc dele
7690: 74 65 0a 20 20 20 20 24 78 73 6c 74 64 6f 63 20  te.    $xsltdoc 
76a0: 64 65 6c 65 74 65 0a 20 20 20 20 73 65 74 20 72  delete.    set r
76b0: 65 73 75 6c 74 0a 7d 20 7b 6d 79 3a 65 6c 65 6d  esult.} {my:elem
76c0: 65 6e 74 7d 0a 0a 74 65 73 74 20 78 73 6c 74 2d  ent}..test xslt-
76d0: 37 2e 32 20 7b 6e 61 6d 65 73 70 61 63 65 73 20  7.2 {namespaces 
76e0: 69 6e 20 74 68 65 20 72 65 73 75 6c 74 20 64 6f  in the result do
76f0: 63 7d 20 7b 0a 20 20 20 20 64 6f 6d 20 70 61 72  c} {.    dom par
7700: 73 65 20 3c 64 6f 6e 74 4d 61 74 74 65 72 2f 3e  se <dontMatter/>
7710: 20 78 6d 6c 64 6f 63 0a 20 20 20 20 64 6f 6d 20   xmldoc.    dom 
7720: 70 61 72 73 65 20 24 78 73 6c 74 20 78 73 6c 74  parse $xslt xslt
7730: 64 6f 63 0a 20 20 20 20 24 78 6d 6c 64 6f 63 20  doc.    $xmldoc 
7740: 78 73 6c 74 20 24 78 73 6c 74 64 6f 63 20 72 65  xslt $xsltdoc re
7750: 73 75 6c 74 44 6f 63 0a 20 20 20 20 73 65 74 20  sultDoc.    set 
7760: 72 65 73 75 6c 74 20 5b 24 72 65 73 75 6c 74 44  result [$resultD
7770: 6f 63 20 61 73 58 4d 4c 20 2d 69 6e 64 65 6e 74  oc asXML -indent
7780: 20 6e 6f 6e 65 5d 0a 20 20 20 20 24 72 65 73 75   none].    $resu
7790: 6c 74 44 6f 63 20 64 65 6c 65 74 65 0a 20 20 20  ltDoc delete.   
77a0: 20 24 78 6d 6c 64 6f 63 20 64 65 6c 65 74 65 0a   $xmldoc delete.
77b0: 20 20 20 20 24 78 73 6c 74 64 6f 63 20 64 65 6c      $xsltdoc del
77c0: 65 74 65 0a 20 20 20 20 73 65 74 20 72 65 73 75  ete.    set resu
77d0: 6c 74 0a 7d 20 7b 3c 6f 75 74 20 78 6d 6c 6e 73  lt.} {<out xmlns
77e0: 3a 6d 79 3d 22 68 74 74 70 3a 2f 2f 6d 79 2e 75  :my="http://my.u
77f0: 72 69 22 3e 3c 6d 79 3a 65 6c 65 6d 65 6e 74 2f  ri"><my:element/
7800: 3e 3c 2f 6f 75 74 3e 7d 0a 0a 74 65 73 74 20 78  ></out>}..test x
7810: 73 6c 74 2d 37 2e 33 20 7b 6e 61 6d 65 73 70 61  slt-7.3 {namespa
7820: 63 65 73 20 69 6e 20 74 68 65 20 72 65 73 75 6c  ces in the resul
7830: 74 20 64 6f 63 7d 20 7b 0a 20 20 20 20 64 6f 6d  t doc} {.    dom
7840: 20 70 61 72 73 65 20 3c 64 6f 6e 74 4d 61 74 74   parse <dontMatt
7850: 65 72 2f 3e 20 78 6d 6c 64 6f 63 0a 20 20 20 20  er/> xmldoc.    
7860: 64 6f 6d 20 70 61 72 73 65 20 24 78 73 6c 74 20  dom parse $xslt 
7870: 78 73 6c 74 64 6f 63 0a 20 20 20 20 24 78 6d 6c  xsltdoc.    $xml
7880: 64 6f 63 20 78 73 6c 74 20 24 78 73 6c 74 64 6f  doc xslt $xsltdo
7890: 63 20 72 65 73 75 6c 74 44 6f 63 0a 20 20 20 20  c resultDoc.    
78a0: 24 72 65 73 75 6c 74 44 6f 63 20 64 6f 63 75 6d  $resultDoc docum
78b0: 65 6e 74 45 6c 65 6d 65 6e 74 20 72 6f 6f 74 0a  entElement root.
78c0: 20 20 20 20 73 65 74 20 6d 79 3a 65 6c 65 6d 65      set my:eleme
78d0: 6e 74 20 5b 24 72 6f 6f 74 20 66 69 72 73 74 43  nt [$root firstC
78e0: 68 69 6c 64 5d 0a 20 20 20 20 73 65 74 20 72 65  hild].    set re
78f0: 73 75 6c 74 20 5b 24 7b 6d 79 3a 65 6c 65 6d 65  sult [${my:eleme
7900: 6e 74 7d 20 6e 61 6d 65 73 70 61 63 65 55 52 49  nt} namespaceURI
7910: 5d 0a 20 20 20 20 24 72 65 73 75 6c 74 44 6f 63  ].    $resultDoc
7920: 20 64 65 6c 65 74 65 0a 20 20 20 20 24 78 6d 6c   delete.    $xml
7930: 64 6f 63 20 64 65 6c 65 74 65 0a 20 20 20 20 24  doc delete.    $
7940: 78 73 6c 74 64 6f 63 20 64 65 6c 65 74 65 0a 20  xsltdoc delete. 
7950: 20 20 20 73 65 74 20 72 65 73 75 6c 74 0a 7d 20     set result.} 
7960: 7b 68 74 74 70 3a 2f 2f 6d 79 2e 75 72 69 7d 0a  {http://my.uri}.
7970: 0a 73 65 74 20 78 73 6c 74 20 7b 0a 20 20 20 20  .set xslt {.    
7980: 3c 78 73 6c 3a 73 74 79 6c 65 73 68 65 65 74 0a  <xsl:stylesheet.
7990: 20 20 20 20 20 20 76 65 72 73 69 6f 6e 3d 22 31        version="1
79a0: 2e 30 22 20 0a 20 20 20 20 20 20 78 6d 6c 6e 73  .0" .      xmlns
79b0: 3a 78 73 6c 3d 22 68 74 74 70 3a 2f 2f 77 77 77  :xsl="http://www
79c0: 2e 77 33 2e 6f 72 67 2f 31 39 39 39 2f 58 53 4c  .w3.org/1999/XSL
79d0: 2f 54 72 61 6e 73 66 6f 72 6d 22 0a 20 20 20 20  /Transform".    
79e0: 20 20 78 6d 6c 6e 73 3a 6d 79 3d 22 68 74 74 70    xmlns:my="http
79f0: 3a 2f 2f 6d 79 2e 75 72 69 22 3e 0a 20 20 20 20  ://my.uri">.    
7a00: 20 20 0a 20 20 20 20 3c 78 73 6c 3a 74 65 6d 70    .    <xsl:temp
7a10: 6c 61 74 65 20 6d 61 74 63 68 3d 22 2f 22 3e 0a  late match="/">.
7a20: 20 20 20 20 20 20 3c 6f 75 74 20 78 6d 6c 6e 73        <out xmlns
7a30: 3d 22 6f 75 74 2e 6e 73 22 3e 0a 20 20 20 20 20  ="out.ns">.     
7a40: 20 20 20 3c 65 6c 65 6d 65 6e 74 20 78 6d 6c 6e     <element xmln
7a50: 73 3d 22 22 2f 3e 0a 20 20 20 20 20 20 3c 2f 6f  s=""/>.      </o
7a60: 75 74 3e 0a 20 20 20 20 3c 2f 78 73 6c 3a 74 65  ut>.    </xsl:te
7a70: 6d 70 6c 61 74 65 3e 0a 20 20 20 20 3c 2f 78 73  mplate>.    </xs
7a80: 6c 3a 73 74 79 6c 65 73 68 65 65 74 3e 7d 0a 0a  l:stylesheet>}..
7a90: 74 65 73 74 20 78 73 6c 74 2d 37 2e 34 20 7b 6e  test xslt-7.4 {n
7aa0: 61 6d 65 73 70 61 63 65 73 20 69 6e 20 74 68 65  amespaces in the
7ab0: 20 72 65 73 75 6c 74 20 64 6f 63 7d 20 7b 0a 20   result doc} {. 
7ac0: 20 20 20 64 6f 6d 20 70 61 72 73 65 20 3c 64 6f     dom parse <do
7ad0: 6e 74 4d 61 74 74 65 72 2f 3e 20 78 6d 6c 64 6f  ntMatter/> xmldo
7ae0: 63 0a 20 20 20 20 64 6f 6d 20 70 61 72 73 65 20  c.    dom parse 
7af0: 24 78 73 6c 74 20 78 73 6c 74 64 6f 63 0a 20 20  $xslt xsltdoc.  
7b00: 20 20 24 78 6d 6c 64 6f 63 20 78 73 6c 74 20 24    $xmldoc xslt $
7b10: 78 73 6c 74 64 6f 63 20 72 65 73 75 6c 74 44 6f  xsltdoc resultDo
7b20: 63 0a 20 20 20 20 73 65 74 20 6e 6f 64 65 73 20  c.    set nodes 
7b30: 5b 24 72 65 73 75 6c 74 44 6f 63 20 67 65 74 45  [$resultDoc getE
7b40: 6c 65 6d 65 6e 74 73 42 79 54 61 67 4e 61 6d 65  lementsByTagName
7b50: 4e 53 20 22 22 20 65 6c 65 6d 65 6e 74 5d 0a 20  NS "" element]. 
7b60: 20 20 20 73 65 74 20 72 65 73 75 6c 74 20 22 22     set result ""
7b70: 0a 20 20 20 20 66 6f 72 65 61 63 68 20 6e 6f 64  .    foreach nod
7b80: 65 20 24 6e 6f 64 65 73 20 7b 0a 20 20 20 20 20  e $nodes {.     
7b90: 20 20 20 6c 61 70 70 65 6e 64 20 72 65 73 75 6c     lappend resul
7ba0: 74 20 5b 24 6e 6f 64 65 20 6e 6f 64 65 4e 61 6d  t [$node nodeNam
7bb0: 65 5d 0a 20 20 20 20 7d 0a 20 20 20 20 24 72 65  e].    }.    $re
7bc0: 73 75 6c 74 44 6f 63 20 64 65 6c 65 74 65 0a 20  sultDoc delete. 
7bd0: 20 20 20 24 78 6d 6c 64 6f 63 20 64 65 6c 65 74     $xmldoc delet
7be0: 65 0a 20 20 20 20 24 78 73 6c 74 64 6f 63 20 64  e.    $xsltdoc d
7bf0: 65 6c 65 74 65 0a 20 20 20 20 73 65 74 20 72 65  elete.    set re
7c00: 73 75 6c 74 0a 7d 20 7b 65 6c 65 6d 65 6e 74 7d  sult.} {element}
7c10: 0a 0a 74 65 73 74 20 78 73 6c 74 2d 37 2e 35 20  ..test xslt-7.5 
7c20: 7b 6e 61 6d 65 73 70 61 63 65 73 20 69 6e 20 74  {namespaces in t
7c30: 68 65 20 72 65 73 75 6c 74 20 64 6f 63 7d 20 7b  he result doc} {
7c40: 0a 20 20 20 20 64 6f 6d 20 70 61 72 73 65 20 3c  .    dom parse <
7c50: 64 6f 6e 74 4d 61 74 74 65 72 2f 3e 20 78 6d 6c  dontMatter/> xml
7c60: 64 6f 63 0a 20 20 20 20 64 6f 6d 20 70 61 72 73  doc.    dom pars
7c70: 65 20 24 78 73 6c 74 20 78 73 6c 74 64 6f 63 0a  e $xslt xsltdoc.
7c80: 20 20 20 20 24 78 6d 6c 64 6f 63 20 78 73 6c 74      $xmldoc xslt
7c90: 20 24 78 73 6c 74 64 6f 63 20 72 65 73 75 6c 74   $xsltdoc result
7ca0: 44 6f 63 0a 20 20 20 20 73 65 74 20 6e 6f 64 65  Doc.    set node
7cb0: 73 20 5b 24 72 65 73 75 6c 74 44 6f 63 20 67 65  s [$resultDoc ge
7cc0: 74 45 6c 65 6d 65 6e 74 73 42 79 54 61 67 4e 61  tElementsByTagNa
7cd0: 6d 65 20 65 6c 65 6d 65 6e 74 5d 0a 20 20 20 20  me element].    
7ce0: 73 65 74 20 72 65 73 75 6c 74 20 22 22 0a 20 20  set result "".  
7cf0: 20 20 66 6f 72 65 61 63 68 20 6e 6f 64 65 20 24    foreach node $
7d00: 6e 6f 64 65 73 20 7b 0a 20 20 20 20 20 20 20 20  nodes {.        
7d10: 6c 61 70 70 65 6e 64 20 72 65 73 75 6c 74 20 5b  lappend result [
7d20: 24 6e 6f 64 65 20 6e 6f 64 65 4e 61 6d 65 5d 0a  $node nodeName].
7d30: 20 20 20 20 7d 0a 20 20 20 20 24 72 65 73 75 6c      }.    $resul
7d40: 74 44 6f 63 20 64 65 6c 65 74 65 0a 20 20 20 20  tDoc delete.    
7d50: 24 78 6d 6c 64 6f 63 20 64 65 6c 65 74 65 0a 20  $xmldoc delete. 
7d60: 20 20 20 24 78 73 6c 74 64 6f 63 20 64 65 6c 65     $xsltdoc dele
7d70: 74 65 0a 20 20 20 20 73 65 74 20 72 65 73 75 6c  te.    set resul
7d80: 74 0a 7d 20 7b 65 6c 65 6d 65 6e 74 7d 0a 0a 73  t.} {element}..s
7d90: 65 74 20 78 73 6c 74 20 7b 0a 20 20 20 20 3c 78  et xslt {.    <x
7da0: 73 6c 3a 73 74 79 6c 65 73 68 65 65 74 0a 20 20  sl:stylesheet.  
7db0: 20 20 20 20 76 65 72 73 69 6f 6e 3d 22 31 2e 30      version="1.0
7dc0: 22 20 0a 20 20 20 20 20 20 78 6d 6c 6e 73 3a 78  " .      xmlns:x
7dd0: 73 6c 3d 22 68 74 74 70 3a 2f 2f 77 77 77 2e 77  sl="http://www.w
7de0: 33 2e 6f 72 67 2f 31 39 39 39 2f 58 53 4c 2f 54  3.org/1999/XSL/T
7df0: 72 61 6e 73 66 6f 72 6d 22 0a 20 20 20 20 20 20  ransform".      
7e00: 78 6d 6c 6e 73 3a 6d 79 3d 22 68 74 74 70 3a 2f  xmlns:my="http:/
7e10: 2f 6d 79 2e 75 72 69 22 3e 0a 20 20 20 20 20 20  /my.uri">.      
7e20: 0a 20 20 20 20 3c 78 73 6c 3a 74 65 6d 70 6c 61  .    <xsl:templa
7e30: 74 65 20 6d 61 74 63 68 3d 22 2f 22 3e 0a 20 20  te match="/">.  
7e40: 20 20 20 20 3c 6f 75 74 3e 0a 20 20 20 20 20 20      <out>.      
7e50: 20 20 3c 78 73 6c 3a 65 6c 65 6d 65 6e 74 20 6e    <xsl:element n
7e60: 61 6d 65 3d 22 65 6c 65 6d 65 6e 74 22 20 6e 61  ame="element" na
7e70: 6d 65 73 70 61 63 65 3d 22 65 6c 65 6d 65 6e 74  mespace="element
7e80: 2e 75 72 69 22 2f 3e 0a 20 20 20 20 20 20 3c 2f  .uri"/>.      </
7e90: 6f 75 74 3e 0a 20 20 20 20 3c 2f 78 73 6c 3a 74  out>.    </xsl:t
7ea0: 65 6d 70 6c 61 74 65 3e 0a 20 20 20 20 3c 2f 78  emplate>.    </x
7eb0: 73 6c 3a 73 74 79 6c 65 73 68 65 65 74 3e 7d 0a  sl:stylesheet>}.
7ec0: 0a 74 65 73 74 20 78 73 6c 74 2d 37 2e 36 20 7b  .test xslt-7.6 {
7ed0: 6e 61 6d 65 73 70 61 63 65 73 20 69 6e 20 74 68  namespaces in th
7ee0: 65 20 72 65 73 75 6c 74 20 64 6f 63 7d 20 7b 0a  e result doc} {.
7ef0: 20 20 20 20 64 6f 6d 20 70 61 72 73 65 20 3c 64      dom parse <d
7f00: 6f 6e 74 4d 61 74 74 65 72 2f 3e 20 78 6d 6c 64  ontMatter/> xmld
7f10: 6f 63 0a 20 20 20 20 64 6f 6d 20 70 61 72 73 65  oc.    dom parse
7f20: 20 24 78 73 6c 74 20 78 73 6c 74 64 6f 63 0a 20   $xslt xsltdoc. 
7f30: 20 20 20 24 78 6d 6c 64 6f 63 20 78 73 6c 74 20     $xmldoc xslt 
7f40: 24 78 73 6c 74 64 6f 63 20 72 65 73 75 6c 74 44  $xsltdoc resultD
7f50: 6f 63 0a 20 20 20 20 73 65 74 20 6e 6f 64 65 73  oc.    set nodes
7f60: 20 5b 24 72 65 73 75 6c 74 44 6f 63 20 67 65 74   [$resultDoc get
7f70: 45 6c 65 6d 65 6e 74 73 42 79 54 61 67 4e 61 6d  ElementsByTagNam
7f80: 65 4e 53 20 22 65 6c 65 6d 65 6e 74 2e 75 72 69  eNS "element.uri
7f90: 22 20 2a 5d 0a 20 20 20 20 73 65 74 20 72 65 73  " *].    set res
7fa0: 75 6c 74 20 22 22 0a 20 20 20 20 66 6f 72 65 61  ult "".    forea
7fb0: 63 68 20 6e 6f 64 65 20 24 6e 6f 64 65 73 20 7b  ch node $nodes {
7fc0: 0a 20 20 20 20 20 20 20 20 6c 61 70 70 65 6e 64  .        lappend
7fd0: 20 72 65 73 75 6c 74 20 5b 24 6e 6f 64 65 20 6e   result [$node n
7fe0: 6f 64 65 4e 61 6d 65 5d 0a 20 20 20 20 7d 0a 20  odeName].    }. 
7ff0: 20 20 20 24 72 65 73 75 6c 74 44 6f 63 20 64 65     $resultDoc de
8000: 6c 65 74 65 0a 20 20 20 20 24 78 6d 6c 64 6f 63  lete.    $xmldoc
8010: 20 64 65 6c 65 74 65 0a 20 20 20 20 24 78 73 6c   delete.    $xsl
8020: 74 64 6f 63 20 64 65 6c 65 74 65 0a 20 20 20 20  tdoc delete.    
8030: 73 65 74 20 72 65 73 75 6c 74 0a 7d 20 7b 65 6c  set result.} {el
8040: 65 6d 65 6e 74 7d 0a 0a 74 65 73 74 20 78 73 6c  ement}..test xsl
8050: 74 2d 37 2e 37 20 7b 70 61 72 65 6e 74 20 6f 66  t-7.7 {parent of
8060: 20 74 68 65 20 72 65 73 75 6c 74 20 64 6f 63 20   the result doc 
8070: 64 6f 63 75 6d 65 6e 74 45 6c 65 6d 65 6e 74 7d  documentElement}
8080: 20 7b 0a 20 20 20 20 64 6f 6d 20 70 61 72 73 65   {.    dom parse
8090: 20 3c 64 6f 6e 74 4d 61 74 74 65 72 2f 3e 20 78   <dontMatter/> x
80a0: 6d 6c 64 6f 63 0a 20 20 20 20 64 6f 6d 20 70 61  mldoc.    dom pa
80b0: 72 73 65 20 24 78 73 6c 74 20 78 73 6c 74 64 6f  rse $xslt xsltdo
80c0: 63 0a 20 20 20 20 24 78 6d 6c 64 6f 63 20 78 73  c.    $xmldoc xs
80d0: 6c 74 20 24 78 73 6c 74 64 6f 63 20 72 65 73 75  lt $xsltdoc resu
80e0: 6c 74 44 6f 63 0a 20 20 20 20 73 65 74 20 72 65  ltDoc.    set re
80f0: 73 75 6c 74 52 6f 6f 74 20 5b 24 72 65 73 75 6c  sultRoot [$resul
8100: 74 44 6f 63 20 64 6f 63 75 6d 65 6e 74 45 6c 65  tDoc documentEle
8110: 6d 65 6e 74 5d 0a 20 20 20 20 73 65 74 20 72 65  ment].    set re
8120: 73 75 6c 74 20 5b 24 72 65 73 75 6c 74 52 6f 6f  sult [$resultRoo
8130: 74 20 70 61 72 65 6e 74 4e 6f 64 65 5d 0a 20 20  t parentNode].  
8140: 20 20 24 72 65 73 75 6c 74 44 6f 63 20 64 65 6c    $resultDoc del
8150: 65 74 65 0a 20 20 20 20 24 78 6d 6c 64 6f 63 20  ete.    $xmldoc 
8160: 64 65 6c 65 74 65 0a 20 20 20 20 24 78 73 6c 74  delete.    $xslt
8170: 64 6f 63 20 64 65 6c 65 74 65 0a 20 20 20 20 73  doc delete.    s
8180: 65 74 20 72 65 73 75 6c 74 0a 7d 20 7b 7d 0a 0a  et result.} {}..
8190: 73 65 74 20 78 73 6c 74 20 7b 0a 20 20 20 20 3c  set xslt {.    <
81a0: 78 73 6c 3a 73 74 79 6c 65 73 68 65 65 74 0a 20  xsl:stylesheet. 
81b0: 20 20 20 20 20 76 65 72 73 69 6f 6e 3d 22 31 2e       version="1.
81c0: 30 22 20 0a 20 20 20 20 20 20 78 6d 6c 6e 73 3a  0" .      xmlns:
81d0: 78 73 6c 3d 22 68 74 74 70 3a 2f 2f 77 77 77 2e  xsl="http://www.
81e0: 77 33 2e 6f 72 67 2f 31 39 39 39 2f 58 53 4c 2f  w3.org/1999/XSL/
81f0: 54 72 61 6e 73 66 6f 72 6d 22 0a 20 20 20 20 20  Transform".     
8200: 20 78 6d 6c 6e 73 3a 6d 79 3d 22 68 74 74 70 3a   xmlns:my="http:
8210: 2f 2f 6d 79 2e 75 72 69 22 3e 0a 20 20 20 20 20  //my.uri">.     
8220: 20 0a 20 20 20 20 3c 78 73 6c 3a 74 65 6d 70 6c   .    <xsl:templ
8230: 61 74 65 20 6d 61 74 63 68 3d 22 2f 22 3e 0a 20  ate match="/">. 
8240: 20 20 20 20 20 20 20 3c 6d 79 3a 65 6c 65 6d 65         <my:eleme
8250: 6e 74 3e 0a 20 20 20 20 20 20 20 20 20 20 3c 65  nt>.          <e
8260: 6c 65 6d 3e 0a 20 20 20 20 20 20 20 20 20 20 20  lem>.           
8270: 20 20 3c 6d 79 3a 66 6f 6f 2f 3e 0a 20 20 20 20    <my:foo/>.    
8280: 20 20 20 20 20 20 3c 2f 65 6c 65 6d 3e 0a 20 20        </elem>.  
8290: 20 20 20 20 20 20 3c 2f 6d 79 3a 65 6c 65 6d 65        </my:eleme
82a0: 6e 74 3e 20 0a 20 20 20 20 3c 2f 78 73 6c 3a 74  nt> .    </xsl:t
82b0: 65 6d 70 6c 61 74 65 3e 0a 20 20 20 20 3c 2f 78  emplate>.    </x
82c0: 73 6c 3a 73 74 79 6c 65 73 68 65 65 74 3e 7d 0a  sl:stylesheet>}.
82d0: 0a 74 65 73 74 20 78 73 6c 74 2d 37 2e 38 20 7b  .test xslt-7.8 {
82e0: 6e 61 6d 65 73 70 61 63 65 73 20 69 6e 20 74 68  namespaces in th
82f0: 65 20 72 65 73 75 6c 74 20 64 6f 63 7d 20 7b 0a  e result doc} {.
8300: 20 20 20 20 64 6f 6d 20 70 61 72 73 65 20 3c 64      dom parse <d
8310: 6f 6e 74 4d 61 74 74 65 72 2f 3e 20 78 6d 6c 64  ontMatter/> xmld
8320: 6f 63 0a 20 20 20 20 64 6f 6d 20 70 61 72 73 65  oc.    dom parse
8330: 20 24 78 73 6c 74 20 78 73 6c 74 64 6f 63 0a 20   $xslt xsltdoc. 
8340: 20 20 20 24 78 6d 6c 64 6f 63 20 78 73 6c 74 20     $xmldoc xslt 
8350: 24 78 73 6c 74 64 6f 63 20 72 65 73 75 6c 74 44  $xsltdoc resultD
8360: 6f 63 0a 20 20 20 20 73 65 74 20 6e 6f 64 65 73  oc.    set nodes
8370: 20 5b 24 72 65 73 75 6c 74 44 6f 63 20 67 65 74   [$resultDoc get
8380: 45 6c 65 6d 65 6e 74 73 42 79 54 61 67 4e 61 6d  ElementsByTagNam
8390: 65 4e 53 20 22 68 74 74 70 3a 2f 2f 6d 79 2e 75  eNS "http://my.u
83a0: 72 69 22 20 2a 5d 0a 20 20 20 20 73 65 74 20 72  ri" *].    set r
83b0: 65 73 75 6c 74 20 22 22 0a 20 20 20 20 66 6f 72  esult "".    for
83c0: 65 61 63 68 20 6e 6f 64 65 20 24 6e 6f 64 65 73  each node $nodes
83d0: 20 7b 0a 20 20 20 20 20 20 20 20 6c 61 70 70 65   {.        lappe
83e0: 6e 64 20 72 65 73 75 6c 74 20 5b 24 6e 6f 64 65  nd result [$node
83f0: 20 6e 6f 64 65 4e 61 6d 65 5d 0a 20 20 20 20 7d   nodeName].    }
8400: 0a 20 20 20 20 24 72 65 73 75 6c 74 44 6f 63 20  .    $resultDoc 
8410: 64 65 6c 65 74 65 0a 20 20 20 20 24 78 6d 6c 64  delete.    $xmld
8420: 6f 63 20 64 65 6c 65 74 65 0a 20 20 20 20 24 78  oc delete.    $x
8430: 73 6c 74 64 6f 63 20 64 65 6c 65 74 65 0a 20 20  sltdoc delete.  
8440: 20 20 73 65 74 20 72 65 73 75 6c 74 0a 7d 20 7b    set result.} {
8450: 6d 79 3a 65 6c 65 6d 65 6e 74 20 6d 79 3a 66 6f  my:element my:fo
8460: 6f 7d 0a 0a 73 65 74 20 78 73 6c 74 20 7b 0a 20  o}..set xslt {. 
8470: 20 20 20 3c 78 73 6c 3a 73 74 79 6c 65 73 68 65     <xsl:styleshe
8480: 65 74 0a 20 20 20 20 20 20 76 65 72 73 69 6f 6e  et.      version
8490: 3d 22 31 2e 30 22 20 0a 20 20 20 20 20 20 78 6d  ="1.0" .      xm
84a0: 6c 6e 73 3a 78 73 6c 3d 22 68 74 74 70 3a 2f 2f  lns:xsl="http://
84b0: 77 77 77 2e 77 33 2e 6f 72 67 2f 31 39 39 39 2f  www.w3.org/1999/
84c0: 58 53 4c 2f 54 72 61 6e 73 66 6f 72 6d 22 0a 20  XSL/Transform". 
84d0: 20 20 20 20 20 78 6d 6c 6e 73 3a 6d 79 3d 22 68       xmlns:my="h
84e0: 74 74 70 3a 2f 2f 6d 79 2e 75 72 69 22 3e 0a 20  ttp://my.uri">. 
84f0: 20 20 20 20 20 0a 20 20 20 20 3c 78 73 6c 3a 74       .    <xsl:t
8500: 65 6d 70 6c 61 74 65 20 6d 61 74 63 68 3d 22 2f  emplate match="/
8510: 22 3e 0a 20 20 20 20 20 20 3c 78 73 6c 3a 65 6c  ">.      <xsl:el
8520: 65 6d 65 6e 74 20 6e 61 6d 65 3d 22 6f 75 74 72  ement name="outr
8530: 6f 6f 74 22 2f 3e 0a 20 20 20 20 3c 2f 78 73 6c  oot"/>.    </xsl
8540: 3a 74 65 6d 70 6c 61 74 65 3e 0a 20 20 20 20 3c  :template>.    <
8550: 2f 78 73 6c 3a 73 74 79 6c 65 73 68 65 65 74 3e  /xsl:stylesheet>
8560: 7d 0a 0a 74 65 73 74 20 78 73 6c 74 2d 37 2e 39  }..test xslt-7.9
8570: 20 7b 70 61 72 65 6e 74 20 6f 66 20 74 68 65 20   {parent of the 
8580: 72 65 73 75 6c 74 20 64 6f 63 20 64 6f 63 75 6d  result doc docum
8590: 65 6e 74 45 6c 65 6d 65 6e 74 7d 20 7b 0a 20 20  entElement} {.  
85a0: 20 20 64 6f 6d 20 70 61 72 73 65 20 3c 64 6f 6e    dom parse <don
85b0: 74 4d 61 74 74 65 72 2f 3e 20 78 6d 6c 64 6f 63  tMatter/> xmldoc
85c0: 0a 20 20 20 20 64 6f 6d 20 70 61 72 73 65 20 24  .    dom parse $
85d0: 78 73 6c 74 20 78 73 6c 74 64 6f 63 0a 20 20 20  xslt xsltdoc.   
85e0: 20 24 78 6d 6c 64 6f 63 20 78 73 6c 74 20 24 78   $xmldoc xslt $x
85f0: 73 6c 74 64 6f 63 20 72 65 73 75 6c 74 44 6f 63  sltdoc resultDoc
8600: 0a 20 20 20 20 73 65 74 20 72 65 73 75 6c 74 52  .    set resultR
8610: 6f 6f 74 20 5b 24 72 65 73 75 6c 74 44 6f 63 20  oot [$resultDoc 
8620: 64 6f 63 75 6d 65 6e 74 45 6c 65 6d 65 6e 74 5d  documentElement]
8630: 0a 20 20 20 20 73 65 74 20 72 65 73 75 6c 74 20  .    set result 
8640: 5b 6c 69 73 74 20 5b 24 72 65 73 75 6c 74 44 6f  [list [$resultDo
8650: 63 20 61 73 58 4d 4c 20 2d 69 6e 64 65 6e 74 20  c asXML -indent 
8660: 6e 6f 6e 65 5d 20 5b 24 72 65 73 75 6c 74 52 6f  none] [$resultRo
8670: 6f 74 20 70 61 72 65 6e 74 4e 6f 64 65 5d 5d 0a  ot parentNode]].
8680: 20 20 20 20 24 72 65 73 75 6c 74 44 6f 63 20 64      $resultDoc d
8690: 65 6c 65 74 65 0a 20 20 20 20 24 78 6d 6c 64 6f  elete.    $xmldo
86a0: 63 20 64 65 6c 65 74 65 0a 20 20 20 20 24 78 73  c delete.    $xs
86b0: 6c 74 64 6f 63 20 64 65 6c 65 74 65 0a 20 20 20  ltdoc delete.   
86c0: 20 73 65 74 20 72 65 73 75 6c 74 0a 7d 20 7b 3c   set result.} {<
86d0: 6f 75 74 72 6f 6f 74 2f 3e 20 7b 7d 7d 0a 0a 73  outroot/> {}}..s
86e0: 65 74 20 78 73 6c 74 20 7b 0a 20 20 20 20 3c 78  et xslt {.    <x
86f0: 73 6c 3a 73 74 79 6c 65 73 68 65 65 74 0a 20 20  sl:stylesheet.  
8700: 20 20 20 20 76 65 72 73 69 6f 6e 3d 22 31 2e 30      version="1.0
8710: 22 20 0a 20 20 20 20 20 20 78 6d 6c 6e 73 3a 78  " .      xmlns:x
8720: 73 6c 3d 22 68 74 74 70 3a 2f 2f 77 77 77 2e 77  sl="http://www.w
8730: 33 2e 6f 72 67 2f 31 39 39 39 2f 58 53 4c 2f 54  3.org/1999/XSL/T
8740: 72 61 6e 73 66 6f 72 6d 22 0a 20 20 20 20 20 20  ransform".      
8750: 78 6d 6c 6e 73 3a 6d 79 3d 22 68 74 74 70 3a 2f  xmlns:my="http:/
8760: 2f 6d 79 2e 75 72 69 22 3e 0a 20 20 20 20 20 20  /my.uri">.      
8770: 0a 20 20 20 20 3c 78 73 6c 3a 74 65 6d 70 6c 61  .    <xsl:templa
8780: 74 65 20 6d 61 74 63 68 3d 22 2f 22 3e 0a 20 20  te match="/">.  
8790: 20 20 20 20 3c 78 73 6c 3a 65 6c 65 6d 65 6e 74      <xsl:element
87a0: 20 6e 61 6d 65 3d 22 65 31 22 2f 3e 0a 20 20 20   name="e1"/>.   
87b0: 20 20 20 3c 78 73 6c 3a 65 6c 65 6d 65 6e 74 20     <xsl:element 
87c0: 6e 61 6d 65 3d 22 65 31 22 2f 3e 0a 20 20 20 20  name="e1"/>.    
87d0: 3c 2f 78 73 6c 3a 74 65 6d 70 6c 61 74 65 3e 0a  </xsl:template>.
87e0: 20 20 20 20 3c 2f 78 73 6c 3a 73 74 79 6c 65 73      </xsl:styles
87f0: 68 65 65 74 3e 7d 0a 0a 74 65 73 74 20 78 73 6c  heet>}..test xsl
8800: 74 2d 37 2e 31 30 20 7b 70 61 72 65 6e 74 20 6f  t-7.10 {parent o
8810: 66 20 74 68 65 20 72 65 73 75 6c 74 20 64 6f 63  f the result doc
8820: 20 64 6f 63 75 6d 65 6e 74 45 6c 65 6d 65 6e 74   documentElement
8830: 7d 20 7b 0a 20 20 20 20 64 6f 6d 20 70 61 72 73  } {.    dom pars
8840: 65 20 3c 64 6f 6e 74 4d 61 74 74 65 72 2f 3e 20  e <dontMatter/> 
8850: 78 6d 6c 64 6f 63 0a 20 20 20 20 64 6f 6d 20 70  xmldoc.    dom p
8860: 61 72 73 65 20 24 78 73 6c 74 20 78 73 6c 74 64  arse $xslt xsltd
8870: 6f 63 0a 20 20 20 20 24 78 6d 6c 64 6f 63 20 78  oc.    $xmldoc x
8880: 73 6c 74 20 24 78 73 6c 74 64 6f 63 20 72 65 73  slt $xsltdoc res
8890: 75 6c 74 44 6f 63 0a 20 20 20 20 73 65 74 20 72  ultDoc.    set r
88a0: 65 73 75 6c 74 20 5b 6c 69 73 74 20 5b 24 72 65  esult [list [$re
88b0: 73 75 6c 74 44 6f 63 20 61 73 58 4d 4c 20 2d 69  sultDoc asXML -i
88c0: 6e 64 65 6e 74 20 6e 6f 6e 65 5d 5d 0a 20 20 20  ndent none]].   
88d0: 20 66 6f 72 65 61 63 68 20 74 6f 70 6c 65 76 65   foreach topleve
88e0: 6c 4e 6f 64 65 20 5b 24 72 65 73 75 6c 74 44 6f  lNode [$resultDo
88f0: 63 20 63 68 69 6c 64 4e 6f 64 65 73 5d 20 7b 0a  c childNodes] {.
8900: 20 20 20 20 20 20 20 20 6c 61 70 70 65 6e 64 20          lappend 
8910: 72 65 73 75 6c 74 20 5b 24 74 6f 70 6c 65 76 65  result [$topleve
8920: 6c 4e 6f 64 65 20 70 61 72 65 6e 74 4e 6f 64 65  lNode parentNode
8930: 5d 0a 20 20 20 20 7d 0a 20 20 20 20 24 72 65 73  ].    }.    $res
8940: 75 6c 74 44 6f 63 20 64 65 6c 65 74 65 0a 20 20  ultDoc delete.  
8950: 20 20 24 78 6d 6c 64 6f 63 20 64 65 6c 65 74 65    $xmldoc delete
8960: 0a 20 20 20 20 24 78 73 6c 74 64 6f 63 20 64 65  .    $xsltdoc de
8970: 6c 65 74 65 0a 20 20 20 20 73 65 74 20 72 65 73  lete.    set res
8980: 75 6c 74 0a 7d 20 7b 3c 65 31 2f 3e 3c 65 31 2f  ult.} {<e1/><e1/
8990: 3e 20 7b 7d 20 7b 7d 7d 0a 0a 73 65 74 20 78 73  > {} {}}..set xs
89a0: 6c 74 20 7b 0a 20 20 20 20 3c 78 73 6c 3a 73 74  lt {.    <xsl:st
89b0: 79 6c 65 73 68 65 65 74 0a 20 20 20 20 20 20 76  ylesheet.      v
89c0: 65 72 73 69 6f 6e 3d 22 31 2e 30 22 20 0a 20 20  ersion="1.0" .  
89d0: 20 20 20 20 78 6d 6c 6e 73 3a 78 73 6c 3d 22 68      xmlns:xsl="h
89e0: 74 74 70 3a 2f 2f 77 77 77 2e 77 33 2e 6f 72 67  ttp://www.w3.org
89f0: 2f 31 39 39 39 2f 58 53 4c 2f 54 72 61 6e 73 66  /1999/XSL/Transf
8a00: 6f 72 6d 22 3e 0a 20 20 20 20 20 20 0a 20 20 20  orm">.      .   
8a10: 20 3c 78 73 6c 3a 74 65 6d 70 6c 61 74 65 20 6d   <xsl:template m
8a20: 61 74 63 68 3d 22 2a 5b 63 75 72 72 65 6e 74 28  atch="*[current(
8a30: 29 20 21 3d 20 27 6e 6f 74 74 68 69 73 27 5d 22  ) != 'notthis']"
8a40: 3e 0a 20 20 20 20 20 20 20 20 20 20 3c 6f 75 74  >.          <out
8a50: 2f 3e 0a 20 20 20 20 3c 2f 78 73 6c 3a 74 65 6d  />.    </xsl:tem
8a60: 70 6c 61 74 65 3e 0a 20 20 20 20 3c 2f 78 73 6c  plate>.    </xsl
8a70: 3a 73 74 79 6c 65 73 68 65 65 74 3e 7d 0a 0a 73  :stylesheet>}..s
8a80: 65 74 20 78 6d 6c 20 7b 3c 64 6f 6e 74 4d 61 74  et xml {<dontMat
8a90: 74 65 72 2f 3e 7d 0a 0a 74 65 73 74 20 78 73 6c  ter/>}..test xsl
8aa0: 74 2d 38 2e 31 20 7b 63 75 72 72 65 6e 74 28 29  t-8.1 {current()
8ab0: 20 6e 6f 74 20 61 6c 6c 6f 77 65 64 20 69 6e 20   not allowed in 
8ac0: 70 61 74 74 65 72 6e 7d 20 7b 0a 20 20 20 20 64  pattern} {.    d
8ad0: 6f 6d 20 70 61 72 73 65 20 24 78 6d 6c 20 78 6d  om parse $xml xm
8ae0: 6c 64 6f 63 0a 20 20 20 20 64 6f 6d 20 70 61 72  ldoc.    dom par
8af0: 73 65 20 24 78 73 6c 74 20 78 73 6c 74 64 6f 63  se $xslt xsltdoc
8b00: 0a 20 20 20 20 63 61 74 63 68 20 7b 24 78 6d 6c  .    catch {$xml
8b10: 64 6f 63 20 78 73 6c 74 20 24 78 73 6c 74 64 6f  doc xslt $xsltdo
8b20: 63 20 72 65 73 75 6c 74 44 6f 63 7d 20 65 72 72  c resultDoc} err
8b30: 4d 73 67 0a 20 20 20 20 24 78 6d 6c 64 6f 63 20  Msg.    $xmldoc 
8b40: 64 65 6c 65 74 65 0a 20 20 20 20 24 78 73 6c 74  delete.    $xslt
8b50: 64 6f 63 20 64 65 6c 65 74 65 0a 20 20 20 20 73  doc delete.    s
8b60: 65 74 20 65 72 72 4d 73 67 0a 7d 20 7b 54 68 65  et errMsg.} {The
8b70: 20 27 63 75 72 72 65 6e 74 27 20 66 75 6e 63 74   'current' funct
8b80: 69 6f 6e 20 69 73 20 6e 6f 74 20 61 6c 6c 6f 77  ion is not allow
8b90: 65 64 20 69 6e 20 50 61 74 74 65 72 6e 2e 20 66  ed in Pattern. f
8ba0: 6f 72 20 27 2a 5b 63 75 72 72 65 6e 74 28 29 20  or '*[current() 
8bb0: 21 3d 20 27 6e 6f 74 74 68 69 73 27 5d 27 20 0a  != 'notthis']' .
8bc0: 0a 50 61 72 73 65 64 20 73 79 6d 62 6f 6c 73 3a  .Parsed symbols:
8bd0: 0a 20 20 20 20 20 30 20 57 43 41 52 44 4e 41 4d  .     0 WCARDNAM
8be0: 45 20 20 20 20 20 20 20 20 30 20 30 30 30 30 30  E        0 00000
8bf0: 30 30 30 30 20 20 20 20 20 30 20 20 2a 0a 20 20  0000     0  *.  
8c00: 20 20 20 31 20 4c 42 52 41 43 4b 45 54 20 20 20     1 LBRACKET   
8c10: 20 20 20 20 20 20 30 20 30 30 30 30 30 30 30 30        0 00000000
8c20: 30 20 20 20 20 20 31 20 20 0a 20 20 20 20 20 32  0     1  .     2
8c30: 20 46 55 4e 43 54 49 4f 4e 20 20 20 20 20 20 20   FUNCTION       
8c40: 20 20 30 20 30 30 30 30 30 30 30 30 30 20 20 20    0 000000000   
8c50: 20 20 38 20 20 63 75 72 72 65 6e 74 0a 20 20 20    8  current.   
8c60: 20 20 33 20 4c 50 41 52 20 20 20 20 20 20 20 20    3 LPAR        
8c70: 20 20 20 20 20 30 20 30 30 30 30 30 30 30 30 30       0 000000000
8c80: 20 20 20 20 20 39 20 20 0a 20 20 20 20 20 34 20       9  .     4 
8c90: 52 50 41 52 20 20 20 20 20 20 20 20 20 20 20 20  RPAR            
8ca0: 20 30 20 30 30 30 30 30 30 30 30 30 20 20 20 20   0 000000000    
8cb0: 31 30 20 20 0a 20 20 20 20 20 35 20 4e 4f 54 45  10  .     5 NOTE
8cc0: 51 20 20 20 20 20 20 20 20 20 20 20 20 30 20 30  Q            0 0
8cd0: 30 30 30 30 30 30 30 30 20 20 20 20 31 33 20 20  00000000    13  
8ce0: 0a 20 20 20 20 20 36 20 4c 49 54 45 52 41 4c 20  .     6 LITERAL 
8cf0: 20 20 20 20 20 20 20 20 20 30 20 30 30 30 30 30           0 00000
8d00: 30 30 30 30 20 20 20 20 32 33 20 20 6e 6f 74 74  0000    23  nott
8d10: 68 69 73 0a 20 20 20 20 20 37 20 52 42 52 41 43  his.     7 RBRAC
8d20: 4b 45 54 20 20 20 20 20 20 20 20 20 30 20 30 30  KET         0 00
8d30: 30 30 30 30 30 30 30 20 20 20 20 32 34 20 20 7d  0000000    24  }
8d40: 0a 0a 73 65 74 20 78 73 6c 74 2d 38 2e 32 2e 78  ..set xslt-8.2.x
8d50: 6d 6c 20 7b 3c 3f 78 6d 6c 20 76 65 72 73 69 6f  ml {<?xml versio
8d60: 6e 3d 22 31 2e 30 22 3f 3e 0a 3c 57 6f 72 6b 62  n="1.0"?>.<Workb
8d70: 6f 6f 6b 20 78 6d 6c 6e 73 3d 22 75 72 6e 3a 73  ook xmlns="urn:s
8d80: 63 68 65 6d 61 73 2d 6d 69 63 72 6f 73 6f 66 74  chemas-microsoft
8d90: 2d 63 6f 6d 3a 6f 66 66 69 63 65 3a 73 70 72 65  -com:office:spre
8da0: 61 64 73 68 65 65 74 22 20 78 6d 6c 6e 73 3a 6f  adsheet" xmlns:o
8db0: 3d 22 75 72 6e 3a 73 63 68 65 6d 61 73 2d 6d 69  ="urn:schemas-mi
8dc0: 63 72 6f 73 6f 66 74 2d 63 6f 6d 3a 6f 66 66 69  crosoft-com:offi
8dd0: 63 65 3a 6f 66 66 69 63 65 22 20 78 6d 6c 6e 73  ce:office" xmlns
8de0: 3a 78 3d 22 75 72 6e 3a 73 63 68 65 6d 61 73 2d  :x="urn:schemas-
8df0: 6d 69 63 72 6f 73 6f 66 74 2d 63 6f 6d 3a 6f 66  microsoft-com:of
8e00: 66 69 63 65 3a 65 78 63 65 6c 22 20 78 6d 6c 6e  fice:excel" xmln
8e10: 73 3a 73 73 3d 22 75 72 6e 3a 73 63 68 65 6d 61  s:ss="urn:schema
8e20: 73 2d 6d 69 63 72 6f 73 6f 66 74 2d 63 6f 6d 3a  s-microsoft-com:
8e30: 6f 66 66 69 63 65 3a 73 70 72 65 61 64 73 68 65  office:spreadshe
8e40: 65 74 22 20 78 6d 6c 6e 73 3a 68 74 6d 6c 3d 22  et" xmlns:html="
8e50: 68 74 74 70 3a 2f 2f 77 77 77 2e 77 33 2e 6f 72  http://www.w3.or
8e60: 67 2f 54 52 2f 52 45 43 2d 68 74 6d 6c 34 30 22  g/TR/REC-html40"
8e70: 3e 0a 09 3c 44 6f 63 75 6d 65 6e 74 50 72 6f 70  >..<DocumentProp
8e80: 65 72 74 69 65 73 20 78 6d 6c 6e 73 3d 22 75 72  erties xmlns="ur
8e90: 6e 3a 73 63 68 65 6d 61 73 2d 6d 69 63 72 6f 73  n:schemas-micros
8ea0: 6f 66 74 2d 63 6f 6d 3a 6f 66 66 69 63 65 3a 6f  oft-com:office:o
8eb0: 66 66 69 63 65 22 3e 0a 09 3c 2f 44 6f 63 75 6d  ffice">..</Docum
8ec0: 65 6e 74 50 72 6f 70 65 72 74 69 65 73 3e 0a 09  entProperties>..
8ed0: 3c 4f 66 66 69 63 65 44 6f 63 75 6d 65 6e 74 53  <OfficeDocumentS
8ee0: 65 74 74 69 6e 67 73 20 78 6d 6c 6e 73 3d 22 75  ettings xmlns="u
8ef0: 72 6e 3a 73 63 68 65 6d 61 73 2d 6d 69 63 72 6f  rn:schemas-micro
8f00: 73 6f 66 74 2d 63 6f 6d 3a 6f 66 66 69 63 65 3a  soft-com:office:
8f10: 6f 66 66 69 63 65 22 3e 0a 09 3c 2f 4f 66 66 69  office">..</Offi
8f20: 63 65 44 6f 63 75 6d 65 6e 74 53 65 74 74 69 6e  ceDocumentSettin
8f30: 67 73 3e 0a 09 3c 45 78 63 65 6c 57 6f 72 6b 62  gs>..<ExcelWorkb
8f40: 6f 6f 6b 20 78 6d 6c 6e 73 3d 22 75 72 6e 3a 73  ook xmlns="urn:s
8f50: 63 68 65 6d 61 73 2d 6d 69 63 72 6f 73 6f 66 74  chemas-microsoft
8f60: 2d 63 6f 6d 3a 6f 66 66 69 63 65 3a 65 78 63 65  -com:office:exce
8f70: 6c 22 3e 0a 09 3c 2f 45 78 63 65 6c 57 6f 72 6b  l">..</ExcelWork
8f80: 62 6f 6f 6b 3e 0a 09 3c 57 6f 72 6b 73 68 65 65  book>..<Workshee
8f90: 74 20 73 73 3a 4e 61 6d 65 3d 22 67 65 6e 65 72  t ss:Name="gener
8fa0: 61 6c 73 22 3e 0a 09 09 3c 54 61 62 6c 65 20 73  als">...<Table s
8fb0: 73 3a 45 78 70 61 6e 64 65 64 43 6f 6c 75 6d 6e  s:ExpandedColumn
8fc0: 43 6f 75 6e 74 3d 22 32 34 32 22 2f 3e 0a 09 3c  Count="242"/>..<
8fd0: 2f 57 6f 72 6b 73 68 65 65 74 3e 0a 09 3c 57 6f  /Worksheet>..<Wo
8fe0: 72 6b 73 68 65 65 74 20 73 73 3a 4e 61 6d 65 3d  rksheet ss:Name=
8ff0: 22 75 72 62 61 6e 22 3e 0a 09 09 3c 54 61 62 6c  "urban">...<Tabl
9000: 65 20 73 73 3a 45 78 70 61 6e 64 65 64 43 6f 6c  e ss:ExpandedCol
9010: 75 6d 6e 43 6f 75 6e 74 3d 22 32 34 32 22 2f 3e  umnCount="242"/>
9020: 0a 09 3c 2f 57 6f 72 6b 73 68 65 65 74 3e 0a 09  ..</Worksheet>..
9030: 3c 57 6f 72 6b 73 68 65 65 74 20 73 73 3a 4e 61  <Worksheet ss:Na
9040: 6d 65 3d 22 6c 61 6e 64 75 73 65 22 3e 0a 09 09  me="landuse">...
9050: 3c 54 61 62 6c 65 20 73 73 3a 45 78 70 61 6e 64  <Table ss:Expand
9060: 65 64 43 6f 6c 75 6d 6e 43 6f 75 6e 74 3d 22 32  edColumnCount="2
9070: 34 32 22 2f 3e 0a 09 3c 2f 57 6f 72 6b 73 68 65  42"/>..</Workshe
9080: 65 74 3e 0a 3c 2f 57 6f 72 6b 62 6f 6f 6b 3e 7d  et>.</Workbook>}
9090: 0a 0a 73 65 74 20 78 73 6c 74 2d 38 2e 32 2e 78  ..set xslt-8.2.x
90a0: 73 6c 20 7b 3c 3f 78 6d 6c 20 76 65 72 73 69 6f  sl {<?xml versio
90b0: 6e 3d 22 31 2e 30 22 20 65 6e 63 6f 64 69 6e 67  n="1.0" encoding
90c0: 3d 22 49 53 4f 2d 38 38 35 39 2d 31 22 3f 3e 0a  ="ISO-8859-1"?>.
90d0: 3c 78 73 6c 3a 73 74 79 6c 65 73 68 65 65 74 20  <xsl:stylesheet 
90e0: 76 65 72 73 69 6f 6e 3d 22 31 2e 30 22 20 78 6d  version="1.0" xm
90f0: 6c 6e 73 3a 78 73 6c 3d 22 68 74 74 70 3a 2f 2f  lns:xsl="http://
9100: 77 77 77 2e 77 33 2e 6f 72 67 2f 31 39 39 39 2f  www.w3.org/1999/
9110: 58 53 4c 2f 54 72 61 6e 73 66 6f 72 6d 22 20 78  XSL/Transform" x
9120: 6d 6c 6e 73 3a 6f 3d 22 75 72 6e 3a 73 63 68 65  mlns:o="urn:sche
9130: 6d 61 73 2d 6d 69 63 72 6f 73 6f 66 74 2d 63 6f  mas-microsoft-co
9140: 6d 3a 6f 66 66 69 63 65 3a 6f 66 66 69 63 65 22  m:office:office"
9150: 20 78 6d 6c 6e 73 3a 78 3d 22 75 72 6e 3a 73 63   xmlns:x="urn:sc
9160: 68 65 6d 61 73 2d 6d 69 63 72 6f 73 6f 66 74 2d  hemas-microsoft-
9170: 63 6f 6d 3a 6f 66 66 69 63 65 3a 65 78 63 65 6c  com:office:excel
9180: 22 20 78 6d 6c 6e 73 3a 73 73 3d 22 75 72 6e 3a  " xmlns:ss="urn:
9190: 73 63 68 65 6d 61 73 2d 6d 69 63 72 6f 73 6f 66  schemas-microsof
91a0: 74 2d 63 6f 6d 3a 6f 66 66 69 63 65 3a 73 70 72  t-com:office:spr
91b0: 65 61 64 73 68 65 65 74 22 20 78 6d 6c 6e 73 3a  eadsheet" xmlns:
91c0: 68 74 6d 6c 3d 22 68 74 74 70 3a 2f 2f 77 77 77  html="http://www
91d0: 2e 77 33 2e 6f 72 67 2f 54 52 2f 52 45 43 2d 68  .w3.org/TR/REC-h
91e0: 74 6d 6c 34 30 22 3e 0a 09 3c 78 73 6c 3a 6f 75  tml40">..<xsl:ou
91f0: 74 70 75 74 20 6d 65 74 68 6f 64 3d 22 78 6d 6c  tput method="xml
9200: 22 20 65 6e 63 6f 64 69 6e 67 3d 22 49 53 4f 2d  " encoding="ISO-
9210: 38 38 35 39 2d 31 22 2f 3e 0a 09 3c 78 73 6c 3a  8859-1"/>..<xsl:
9220: 74 65 6d 70 6c 61 74 65 20 6d 61 74 63 68 3d 22  template match="
9230: 2f 73 73 3a 57 6f 72 6b 62 6f 6f 6b 22 3e 0a 09  /ss:Workbook">..
9240: 09 3c 78 73 6c 3a 63 6f 70 79 3e 0a 09 09 09 3c  .<xsl:copy>....<
9250: 78 73 6c 3a 63 6f 70 79 2d 6f 66 20 73 65 6c 65  xsl:copy-of sele
9260: 63 74 3d 22 2e 2f 2a 5b 6e 6f 74 28 6e 61 6d 65  ct="./*[not(name
9270: 28 29 20 3d 20 27 57 6f 72 6b 73 68 65 65 74 27  () = 'Worksheet'
9280: 29 20 6f 72 20 28 6e 61 6d 65 28 29 20 3d 20 27  ) or (name() = '
9290: 57 6f 72 6b 73 68 65 65 74 27 20 61 6e 64 20 40  Worksheet' and @
92a0: 73 73 3a 4e 61 6d 65 20 3d 20 27 67 65 6e 65 72  ss:Name = 'gener
92b0: 61 6c 73 27 20 29 5d 22 2f 3e 0a 09 09 3c 2f 78  als' )]"/>...</x
92c0: 73 6c 3a 63 6f 70 79 3e 20 0a 09 3c 2f 78 73 6c  sl:copy> ..</xsl
92d0: 3a 74 65 6d 70 6c 61 74 65 3e 0a 3c 2f 78 73 6c  :template>.</xsl
92e0: 3a 73 74 79 6c 65 73 68 65 65 74 3e 7d 0a 0a 73  :stylesheet>}..s
92f0: 65 74 20 78 73 6c 74 2d 38 2e 32 2e 6f 75 74 70  et xslt-8.2.outp
9300: 75 74 20 7b 3c 57 6f 72 6b 62 6f 6f 6b 20 78 6d  ut {<Workbook xm
9310: 6c 6e 73 3d 22 75 72 6e 3a 73 63 68 65 6d 61 73  lns="urn:schemas
9320: 2d 6d 69 63 72 6f 73 6f 66 74 2d 63 6f 6d 3a 6f  -microsoft-com:o
9330: 66 66 69 63 65 3a 73 70 72 65 61 64 73 68 65 65  ffice:spreadshee
9340: 74 22 20 78 6d 6c 6e 73 3a 6f 3d 22 75 72 6e 3a  t" xmlns:o="urn:
9350: 73 63 68 65 6d 61 73 2d 6d 69 63 72 6f 73 6f 66  schemas-microsof
9360: 74 2d 63 6f 6d 3a 6f 66 66 69 63 65 3a 6f 66 66  t-com:office:off
9370: 69 63 65 22 20 78 6d 6c 6e 73 3a 78 3d 22 75 72  ice" xmlns:x="ur
9380: 6e 3a 73 63 68 65 6d 61 73 2d 6d 69 63 72 6f 73  n:schemas-micros
9390: 6f 66 74 2d 63 6f 6d 3a 6f 66 66 69 63 65 3a 65  oft-com:office:e
93a0: 78 63 65 6c 22 20 78 6d 6c 6e 73 3a 73 73 3d 22  xcel" xmlns:ss="
93b0: 75 72 6e 3a 73 63 68 65 6d 61 73 2d 6d 69 63 72  urn:schemas-micr
93c0: 6f 73 6f 66 74 2d 63 6f 6d 3a 6f 66 66 69 63 65  osoft-com:office
93d0: 3a 73 70 72 65 61 64 73 68 65 65 74 22 20 78 6d  :spreadsheet" xm
93e0: 6c 6e 73 3a 68 74 6d 6c 3d 22 68 74 74 70 3a 2f  lns:html="http:/
93f0: 2f 77 77 77 2e 77 33 2e 6f 72 67 2f 54 52 2f 52  /www.w3.org/TR/R
9400: 45 43 2d 68 74 6d 6c 34 30 22 3e 3c 44 6f 63 75  EC-html40"><Docu
9410: 6d 65 6e 74 50 72 6f 70 65 72 74 69 65 73 20 78  mentProperties x
9420: 6d 6c 6e 73 3d 22 75 72 6e 3a 73 63 68 65 6d 61  mlns="urn:schema
9430: 73 2d 6d 69 63 72 6f 73 6f 66 74 2d 63 6f 6d 3a  s-microsoft-com:
9440: 6f 66 66 69 63 65 3a 6f 66 66 69 63 65 22 3e 0a  office:office">.
9450: 09 3c 2f 44 6f 63 75 6d 65 6e 74 50 72 6f 70 65  .</DocumentPrope
9460: 72 74 69 65 73 3e 3c 4f 66 66 69 63 65 44 6f 63  rties><OfficeDoc
9470: 75 6d 65 6e 74 53 65 74 74 69 6e 67 73 20 78 6d  umentSettings xm
9480: 6c 6e 73 3d 22 75 72 6e 3a 73 63 68 65 6d 61 73  lns="urn:schemas
9490: 2d 6d 69 63 72 6f 73 6f 66 74 2d 63 6f 6d 3a 6f  -microsoft-com:o
94a0: 66 66 69 63 65 3a 6f 66 66 69 63 65 22 3e 0a 09  ffice:office">..
94b0: 3c 2f 4f 66 66 69 63 65 44 6f 63 75 6d 65 6e 74  </OfficeDocument
94c0: 53 65 74 74 69 6e 67 73 3e 3c 45 78 63 65 6c 57  Settings><ExcelW
94d0: 6f 72 6b 62 6f 6f 6b 20 78 6d 6c 6e 73 3d 22 75  orkbook xmlns="u
94e0: 72 6e 3a 73 63 68 65 6d 61 73 2d 6d 69 63 72 6f  rn:schemas-micro
94f0: 73 6f 66 74 2d 63 6f 6d 3a 6f 66 66 69 63 65 3a  soft-com:office:
9500: 65 78 63 65 6c 22 3e 0a 09 3c 2f 45 78 63 65 6c  excel">..</Excel
9510: 57 6f 72 6b 62 6f 6f 6b 3e 3c 57 6f 72 6b 73 68  Workbook><Worksh
9520: 65 65 74 20 73 73 3a 4e 61 6d 65 3d 22 67 65 6e  eet ss:Name="gen
9530: 65 72 61 6c 73 22 3e 0a 09 09 3c 54 61 62 6c 65  erals">...<Table
9540: 20 73 73 3a 45 78 70 61 6e 64 65 64 43 6f 6c 75   ss:ExpandedColu
9550: 6d 6e 43 6f 75 6e 74 3d 22 32 34 32 22 2f 3e 0a  mnCount="242"/>.
9560: 09 3c 2f 57 6f 72 6b 73 68 65 65 74 3e 3c 2f 57  .</Worksheet></W
9570: 6f 72 6b 62 6f 6f 6b 3e 7d 0a 0a 74 65 73 74 20  orkbook>}..test 
9580: 78 73 6c 74 2d 38 2e 32 20 7b 6e 61 6d 65 73 70  xslt-8.2 {namesp
9590: 61 63 65 20 68 61 6e 64 6c 69 6e 67 20 6f 66 20  ace handling of 
95a0: 63 6f 70 79 2d 6f 66 7d 20 7b 0a 20 20 20 20 64  copy-of} {.    d
95b0: 6f 6d 20 70 61 72 73 65 20 2d 6b 65 65 70 45 6d  om parse -keepEm
95c0: 70 74 69 65 73 20 24 7b 78 73 6c 74 2d 38 2e 32  pties ${xslt-8.2
95d0: 2e 78 6d 6c 7d 20 78 6d 6c 64 6f 63 0a 20 20 20  .xml} xmldoc.   
95e0: 20 64 6f 6d 20 70 61 72 73 65 20 2d 6b 65 65 70   dom parse -keep
95f0: 45 6d 70 74 69 65 73 20 24 7b 78 73 6c 74 2d 38  Empties ${xslt-8
9600: 2e 32 2e 78 73 6c 7d 20 78 73 6c 74 64 6f 63 0a  .2.xsl} xsltdoc.
9610: 20 20 20 20 24 78 6d 6c 64 6f 63 20 78 73 6c 74      $xmldoc xslt
9620: 20 24 78 73 6c 74 64 6f 63 20 72 65 73 75 6c 74   $xsltdoc result
9630: 44 6f 63 0a 20 20 20 20 24 78 6d 6c 64 6f 63 20  Doc.    $xmldoc 
9640: 64 65 6c 65 74 65 0a 20 20 20 20 24 78 73 6c 74  delete.    $xslt
9650: 64 6f 63 20 64 65 6c 65 74 65 0a 20 20 20 20 73  doc delete.    s
9660: 65 74 20 72 65 73 75 6c 74 20 5b 24 72 65 73 75  et result [$resu
9670: 6c 74 44 6f 63 20 61 73 58 4d 4c 20 2d 69 6e 64  ltDoc asXML -ind
9680: 65 6e 74 20 6e 6f 6e 65 5d 0a 20 20 20 20 24 72  ent none].    $r
9690: 65 73 75 6c 74 44 6f 63 20 64 65 6c 65 74 65 0a  esultDoc delete.
96a0: 20 20 20 20 73 65 74 20 72 65 73 75 6c 74 0a 7d      set result.}
96b0: 20 24 7b 78 73 6c 74 2d 38 2e 32 2e 6f 75 74 70   ${xslt-8.2.outp
96c0: 75 74 7d 0a 0a 74 65 73 74 20 78 73 6c 74 2d 38  ut}..test xslt-8
96d0: 2e 33 20 7b 66 6f 72 6d 61 74 2d 6e 75 6d 62 65  .3 {format-numbe
96e0: 72 28 29 20 72 75 6e 64 69 6e 67 7d 20 7b 0a 20  r() runding} {. 
96f0: 20 20 20 73 65 74 20 78 6d 6c 20 7b 3c 53 61 6d     set xml {<Sam
9700: 70 6c 65 3e 0a 20 20 3c 56 61 6c 75 65 3e 31 2e  ple>.  <Value>1.
9710: 39 39 39 3c 2f 56 61 6c 75 65 3e 0a 20 20 3c 56  999</Value>.  <V
9720: 61 6c 75 65 3e 31 2e 39 39 38 3c 2f 56 61 6c 75  alue>1.998</Valu
9730: 65 3e 0a 20 20 3c 56 61 6c 75 65 3e 31 2e 39 39  e>.  <Value>1.99
9740: 37 3c 2f 56 61 6c 75 65 3e 0a 20 20 3c 56 61 6c  7</Value>.  <Val
9750: 75 65 3e 31 2e 39 39 36 3c 2f 56 61 6c 75 65 3e  ue>1.996</Value>
9760: 0a 20 20 3c 56 61 6c 75 65 3e 31 2e 39 39 35 3c  .  <Value>1.995<
9770: 2f 56 61 6c 75 65 3e 0a 20 20 3c 56 61 6c 75 65  /Value>.  <Value
9780: 3e 31 2e 39 39 34 3c 2f 56 61 6c 75 65 3e 0a 20  >1.994</Value>. 
9790: 20 3c 56 61 6c 75 65 3e 31 2e 39 39 3c 2f 56 61   <Value>1.99</Va
97a0: 6c 75 65 3e 0a 20 20 3c 56 61 6c 75 65 3e 31 2e  lue>.  <Value>1.
97b0: 39 3c 2f 56 61 6c 75 65 3e 0a 20 20 3c 56 61 6c  9</Value>.  <Val
97c0: 75 65 3e 31 2e 3c 2f 56 61 6c 75 65 3e 0a 3c 2f  ue>1.</Value>.</
97d0: 53 61 6d 70 6c 65 3e 7d 0a 20 20 20 20 73 65 74  Sample>}.    set
97e0: 20 78 73 6c 74 20 7b 3c 78 73 6c 3a 73 74 79 6c   xslt {<xsl:styl
97f0: 65 73 68 65 65 74 20 76 65 72 73 69 6f 6e 3d 22  esheet version="
9800: 31 2e 30 22 20 78 6d 6c 6e 73 3a 78 73 6c 3d 22  1.0" xmlns:xsl="
9810: 68 74 74 70 3a 2f 2f 77 77 77 2e 77 33 2e 6f 72  http://www.w3.or
9820: 67 2f 31 39 39 39 2f 58 53 4c 2f 54 72 61 6e 73  g/1999/XSL/Trans
9830: 66 6f 72 6d 22 3e 0a 20 20 3c 78 73 6c 3a 6f 75  form">.  <xsl:ou
9840: 74 70 75 74 20 6d 65 74 68 6f 64 3d 22 74 65 78  tput method="tex
9850: 74 22 2f 3e 0a 20 20 3c 78 73 6c 3a 74 65 6d 70  t"/>.  <xsl:temp
9860: 6c 61 74 65 20 6d 61 74 63 68 3d 22 2f 22 3e 0a  late match="/">.
9870: 20 20 20 20 3c 78 73 6c 3a 66 6f 72 2d 65 61 63      <xsl:for-eac
9880: 68 20 73 65 6c 65 63 74 3d 22 2f 53 61 6d 70 6c  h select="/Sampl
9890: 65 2f 56 61 6c 75 65 22 3e 0a 20 20 20 20 20 20  e/Value">.      
98a0: 3c 78 73 6c 3a 76 61 6c 75 65 2d 6f 66 20 73 65  <xsl:value-of se
98b0: 6c 65 63 74 3d 22 66 6f 72 6d 61 74 2d 6e 75 6d  lect="format-num
98c0: 62 65 72 28 2e 2c 27 23 30 2e 30 30 27 29 22 2f  ber(.,'#0.00')"/
98d0: 3e 0a 20 20 20 20 20 20 3c 78 73 6c 3a 74 65 78  >.      <xsl:tex
98e0: 74 3e 20 3c 2f 78 73 6c 3a 74 65 78 74 3e 0a 20  t> </xsl:text>. 
98f0: 20 20 20 3c 2f 78 73 6c 3a 66 6f 72 2d 65 61 63     </xsl:for-eac
9900: 68 3e 0a 20 20 3c 2f 78 73 6c 3a 74 65 6d 70 6c  h>.  </xsl:templ
9910: 61 74 65 3e 0a 3c 2f 78 73 6c 3a 73 74 79 6c 65  ate>.</xsl:style
9920: 73 68 65 65 74 3e 7d 0a 20 20 20 20 64 6f 6d 20  sheet>}.    dom 
9930: 70 61 72 73 65 20 2d 6b 65 65 70 45 6d 70 74 69  parse -keepEmpti
9940: 65 73 20 24 78 6d 6c 20 78 6d 6c 64 6f 63 0a 20  es $xml xmldoc. 
9950: 20 20 20 64 6f 6d 20 70 61 72 73 65 20 2d 6b 65     dom parse -ke
9960: 65 70 45 6d 70 74 69 65 73 20 24 78 73 6c 74 20  epEmpties $xslt 
9970: 78 73 6c 74 64 6f 63 0a 20 20 20 20 24 78 6d 6c  xsltdoc.    $xml
9980: 64 6f 63 20 78 73 6c 74 20 24 78 73 6c 74 64 6f  doc xslt $xsltdo
9990: 63 20 72 65 73 75 6c 74 44 6f 63 0a 20 20 20 20  c resultDoc.    
99a0: 24 78 6d 6c 64 6f 63 20 64 65 6c 65 74 65 0a 20  $xmldoc delete. 
99b0: 20 20 20 24 78 73 6c 74 64 6f 63 20 64 65 6c 65     $xsltdoc dele
99c0: 74 65 0a 20 20 20 20 73 65 74 20 72 65 73 75 6c  te.    set resul
99d0: 74 20 5b 24 72 65 73 75 6c 74 44 6f 63 20 61 73  t [$resultDoc as
99e0: 58 4d 4c 20 2d 69 6e 64 65 6e 74 20 6e 6f 6e 65  XML -indent none
99f0: 5d 0a 20 20 20 20 24 72 65 73 75 6c 74 44 6f 63  ].    $resultDoc
9a00: 20 64 65 6c 65 74 65 0a 20 20 20 20 73 65 74 20   delete.    set 
9a10: 72 65 73 75 6c 74 0a 7d 20 7b 32 2e 30 30 20 32  result.} {2.00 2
9a20: 2e 30 30 20 32 2e 30 30 20 32 2e 30 30 20 32 2e  .00 2.00 2.00 2.
9a30: 30 30 20 31 2e 39 39 20 31 2e 39 39 20 31 2e 39  00 1.99 1.99 1.9
9a40: 30 20 31 2e 30 30 20 7d 0a 0a 74 65 73 74 20 78  0 1.00 }..test x
9a50: 73 6c 74 2d 38 2e 34 20 7b 45 72 72 6f 6e 65 6f  slt-8.4 {Erroneo
9a60: 75 73 20 58 50 61 74 68 20 65 78 70 72 20 61 73  us XPath expr as
9a70: 20 6d 61 74 63 68 20 61 74 74 72 69 62 75 74 65   match attribute
9a80: 20 6f 66 20 61 20 74 65 6d 70 6c 61 74 65 7d 20   of a template} 
9a90: 7b 0a 20 20 20 20 73 65 74 20 78 6d 6c 44 6f 63  {.    set xmlDoc
9aa0: 20 5b 64 6f 6d 20 70 61 72 73 65 20 7b 3c 21 2d   [dom parse {<!-
9ab0: 2d 79 65 73 2d 2d 3e 20 20 3c 64 6f 63 3e 3c 65  -yes-->  <doc><e
9ac0: 31 2f 3e 3c 2f 64 6f 63 3e 3c 3f 66 6f 6f 20 62  1/></doc><?foo b
9ad0: 61 72 3f 3e 7d 5d 0a 20 20 20 20 73 65 74 20 78  ar?>}].    set x
9ae0: 73 6c 74 20 7b 3c 3f 78 6d 6c 20 76 65 72 73 69  slt {<?xml versi
9af0: 6f 6e 3d 22 31 2e 30 22 20 65 6e 63 6f 64 69 6e  on="1.0" encodin
9b00: 67 3d 22 49 53 4f 2d 38 38 35 39 2d 31 22 3f 3e  g="ISO-8859-1"?>
9b10: 0a 3c 78 73 6c 3a 74 72 61 6e 73 66 6f 72 6d 20  .<xsl:transform 
9b20: 76 65 72 73 69 6f 6e 3d 22 31 2e 30 22 0a 78 6d  version="1.0".xm
9b30: 6c 6e 73 3a 78 73 6c 3d 22 68 74 74 70 3a 2f 2f  lns:xsl="http://
9b40: 77 77 77 2e 77 33 2e 6f 72 67 2f 31 39 39 39 2f  www.w3.org/1999/
9b50: 58 53 4c 2f 54 72 61 6e 73 66 6f 72 6d 22 3e 0a  XSL/Transform">.
9b60: 3c 78 73 6c 3a 74 65 6d 70 6c 61 74 65 20 6d 61  <xsl:template ma
9b70: 74 63 68 3d 22 2f 5b 70 6f 73 69 74 69 6f 6e 28  tch="/[position(
9b80: 29 3d 31 5d 22 3e 0a 20 20 20 20 20 3c 78 73 6c  )=1]">.     <xsl
9b90: 3a 66 6f 72 2d 65 61 63 68 20 73 65 6c 65 63 74  :for-each select
9ba0: 3d 22 74 61 62 6c 65 2f 72 6f 77 22 3e 0a 20 20  ="table/row">.  
9bb0: 20 20 20 3c 2f 78 73 6c 3a 66 6f 72 2d 65 61 63     </xsl:for-eac
9bc0: 68 3e 0a 3c 2f 78 73 6c 3a 74 65 6d 70 6c 61 74  h>.</xsl:templat
9bd0: 65 3e 0a 3c 2f 78 73 6c 3a 74 72 61 6e 73 66 6f  e>.</xsl:transfo
9be0: 72 6d 3e 0a 7d 0a 0a 20 20 20 20 73 65 74 20 78  rm>.}..    set x
9bf0: 73 6c 74 44 6f 63 20 5b 64 6f 6d 20 70 61 72 73  sltDoc [dom pars
9c00: 65 20 24 78 73 6c 74 5d 0a 20 20 20 20 73 65 74  e $xslt].    set
9c10: 20 72 65 73 75 6c 74 20 5b 63 61 74 63 68 20 7b   result [catch {
9c20: 24 78 6d 6c 44 6f 63 20 78 73 6c 74 20 24 78 73  $xmlDoc xslt $xs
9c30: 6c 74 44 6f 63 7d 20 65 72 72 4d 73 67 5d 0a 20  ltDoc} errMsg]. 
9c40: 20 20 20 24 78 6d 6c 44 6f 63 20 64 65 6c 65 74     $xmlDoc delet
9c50: 65 0a 20 20 20 20 24 78 73 6c 74 44 6f 63 20 64  e.    $xsltDoc d
9c60: 65 6c 65 74 65 0a 20 20 20 20 73 65 74 20 72 65  elete.    set re
9c70: 73 75 6c 74 0a 7d 20 7b 31 7d 0a 0a 74 65 73 74  sult.} {1}..test
9c80: 20 78 73 6c 74 2d 38 2e 35 20 7b 4d 69 6e 69 6d   xslt-8.5 {Minim
9c90: 61 6c 20 78 73 6c 74 20 31 2e 30 20 73 74 79 6c  al xslt 1.0 styl
9ca0: 65 73 68 65 65 74 7d 20 7b 0a 20 20 20 20 73 65  esheet} {.    se
9cb0: 74 20 78 6d 6c 44 6f 63 20 7b 3c 64 6f 63 3e 3c  t xmlDoc {<doc><
9cc0: 63 68 69 6c 64 2f 3e 3c 2f 64 6f 63 3e 7d 0a 20  child/></doc>}. 
9cd0: 20 20 20 73 65 74 20 78 73 6c 74 44 6f 63 20 7b     set xsltDoc {
9ce0: 3c 78 73 6c 3a 73 74 79 6c 65 73 68 65 65 74 20  <xsl:stylesheet 
9cf0: 78 6d 6c 6e 73 3a 78 73 6c 3d 22 68 74 74 70 3a  xmlns:xsl="http:
9d00: 2f 2f 77 77 77 2e 77 33 2e 6f 72 67 2f 31 39 39  //www.w3.org/199
9d10: 39 2f 58 53 4c 2f 54 72 61 6e 73 66 6f 72 6d 22  9/XSL/Transform"
9d20: 20 76 65 72 73 69 6f 6e 3d 22 31 2e 30 22 2f 3e   version="1.0"/>
9d30: 7d 0a 20 20 20 20 64 6f 6d 20 70 61 72 73 65 20  }.    dom parse 
9d40: 2d 6b 65 65 70 45 6d 70 74 69 65 73 20 24 78 6d  -keepEmpties $xm
9d50: 6c 44 6f 63 20 78 6d 6c 64 6f 63 0a 20 20 20 20  lDoc xmldoc.    
9d60: 64 6f 6d 20 70 61 72 73 65 20 2d 6b 65 65 70 45  dom parse -keepE
9d70: 6d 70 74 69 65 73 20 24 78 73 6c 74 44 6f 63 20  mpties $xsltDoc 
9d80: 78 73 6c 74 64 6f 63 0a 20 20 20 20 24 78 6d 6c  xsltdoc.    $xml
9d90: 64 6f 63 20 78 73 6c 74 20 24 78 73 6c 74 64 6f  doc xslt $xsltdo
9da0: 63 20 72 65 73 75 6c 74 44 6f 63 0a 20 20 20 20  c resultDoc.    
9db0: 73 65 74 20 72 65 73 75 6c 74 20 5b 24 72 65 73  set result [$res
9dc0: 75 6c 74 44 6f 63 20 61 73 58 4d 4c 20 2d 69 6e  ultDoc asXML -in
9dd0: 64 65 6e 74 20 6e 6f 6e 65 5d 0a 20 20 20 20 24  dent none].    $
9de0: 78 6d 6c 64 6f 63 20 64 65 6c 65 74 65 0a 20 20  xmldoc delete.  
9df0: 20 20 24 78 73 6c 74 64 6f 63 20 64 65 6c 65 74    $xsltdoc delet
9e00: 65 0a 20 20 20 20 24 72 65 73 75 6c 74 44 6f 63  e.    $resultDoc
9e10: 20 64 65 6c 65 74 65 0a 20 20 20 20 73 65 74 20   delete.    set 
9e20: 72 65 73 75 6c 74 0a 7d 20 7b 7d 0a 0a 74 65 73  result.} {}..tes
9e30: 74 20 78 73 6c 74 2d 38 2e 36 20 7b 41 6c 6d 6f  t xslt-8.6 {Almo
9e40: 73 74 20 6d 69 6e 69 6d 61 6c 20 78 73 6c 74 20  st minimal xslt 
9e50: 31 2e 30 20 73 74 79 6c 65 73 68 65 65 74 7d 20  1.0 stylesheet} 
9e60: 7b 0a 20 20 20 20 73 65 74 20 78 6d 6c 44 6f 63  {.    set xmlDoc
9e70: 20 7b 3c 64 6f 63 3e 3c 63 68 69 6c 64 2f 3e 3c   {<doc><child/><
9e80: 2f 64 6f 63 3e 7d 0a 20 20 20 20 73 65 74 20 78  /doc>}.    set x
9e90: 73 6c 74 44 6f 63 20 7b 3c 78 73 6c 3a 73 74 79  sltDoc {<xsl:sty
9ea0: 6c 65 73 68 65 65 74 20 0a 20 20 20 20 20 20 20  lesheet .       
9eb0: 20 78 6d 6c 6e 73 3a 78 73 6c 3d 22 68 74 74 70   xmlns:xsl="http
9ec0: 3a 2f 2f 77 77 77 2e 77 33 2e 6f 72 67 2f 31 39  ://www.w3.org/19
9ed0: 39 39 2f 58 53 4c 2f 54 72 61 6e 73 66 6f 72 6d  99/XSL/Transform
9ee0: 22 20 76 65 72 73 69 6f 6e 3d 22 31 2e 30 22 3e  " version="1.0">
9ef0: 0a 20 20 20 20 20 20 20 20 3c 78 73 6c 3a 74 65  .        <xsl:te
9f00: 6d 70 6c 61 74 65 20 6d 61 74 63 68 3d 22 2f 22  mplate match="/"
9f10: 2f 3e 0a 20 20 20 20 20 20 20 20 3c 2f 78 73 6c  />.        </xsl
9f20: 3a 73 74 79 6c 65 73 68 65 65 74 3e 7d 0a 20 20  :stylesheet>}.  
9f30: 20 20 64 6f 6d 20 70 61 72 73 65 20 2d 6b 65 65    dom parse -kee
9f40: 70 45 6d 70 74 69 65 73 20 24 78 6d 6c 44 6f 63  pEmpties $xmlDoc
9f50: 20 78 6d 6c 64 6f 63 0a 20 20 20 20 64 6f 6d 20   xmldoc.    dom 
9f60: 70 61 72 73 65 20 2d 6b 65 65 70 45 6d 70 74 69  parse -keepEmpti
9f70: 65 73 20 24 78 73 6c 74 44 6f 63 20 78 73 6c 74  es $xsltDoc xslt
9f80: 64 6f 63 0a 20 20 20 20 24 78 6d 6c 64 6f 63 20  doc.    $xmldoc 
9f90: 78 73 6c 74 20 24 78 73 6c 74 64 6f 63 20 72 65  xslt $xsltdoc re
9fa0: 73 75 6c 74 44 6f 63 0a 20 20 20 20 73 65 74 20  sultDoc.    set 
9fb0: 72 65 73 75 6c 74 20 5b 24 72 65 73 75 6c 74 44  result [$resultD
9fc0: 6f 63 20 61 73 58 4d 4c 20 2d 69 6e 64 65 6e 74  oc asXML -indent
9fd0: 20 6e 6f 6e 65 5d 0a 20 20 20 20 24 78 6d 6c 64   none].    $xmld
9fe0: 6f 63 20 64 65 6c 65 74 65 0a 20 20 20 20 24 78  oc delete.    $x
9ff0: 73 6c 74 64 6f 63 20 64 65 6c 65 74 65 0a 20 20  sltdoc delete.  
a000: 20 20 24 72 65 73 75 6c 74 44 6f 63 20 64 65 6c    $resultDoc del
a010: 65 74 65 0a 20 20 20 20 73 65 74 20 72 65 73 75  ete.    set resu
a020: 6c 74 0a 7d 20 7b 7d 0a 0a 74 65 73 74 20 78 73  lt.} {}..test xs
a030: 6c 74 2d 38 2e 37 20 7b 4d 69 6e 69 6d 61 6c 20  lt-8.7 {Minimal 
a040: 78 73 6c 74 20 31 2e 30 20 73 74 79 6c 65 73 68  xslt 1.0 stylesh
a050: 65 65 74 20 72 65 74 75 72 6e 73 20 74 65 78 74  eet returns text
a060: 20 63 6f 6e 74 65 6e 74 20 6f 66 20 64 6f 63 20   content of doc 
a070: 62 79 20 64 65 66 61 75 6c 74 7d 20 7b 0a 20 20  by default} {.  
a080: 20 20 73 65 74 20 78 6d 6c 44 6f 63 20 7b 3c 64    set xmlDoc {<d
a090: 6f 63 3e 3c 63 68 69 6c 64 3e 74 65 78 74 3c 2f  oc><child>text</
a0a0: 63 68 69 6c 64 3e 3c 2f 64 6f 63 3e 7d 0a 20 20  child></doc>}.  
a0b0: 20 20 73 65 74 20 78 73 6c 74 44 6f 63 20 7b 3c    set xsltDoc {<
a0c0: 78 73 6c 3a 73 74 79 6c 65 73 68 65 65 74 20 78  xsl:stylesheet x
a0d0: 6d 6c 6e 73 3a 78 73 6c 3d 22 68 74 74 70 3a 2f  mlns:xsl="http:/
a0e0: 2f 77 77 77 2e 77 33 2e 6f 72 67 2f 31 39 39 39  /www.w3.org/1999
a0f0: 2f 58 53 4c 2f 54 72 61 6e 73 66 6f 72 6d 22 20  /XSL/Transform" 
a100: 76 65 72 73 69 6f 6e 3d 22 31 2e 30 22 2f 3e 7d  version="1.0"/>}
a110: 0a 20 20 20 20 64 6f 6d 20 70 61 72 73 65 20 2d  .    dom parse -
a120: 6b 65 65 70 45 6d 70 74 69 65 73 20 24 78 6d 6c  keepEmpties $xml
a130: 44 6f 63 20 78 6d 6c 64 6f 63 0a 20 20 20 20 64  Doc xmldoc.    d
a140: 6f 6d 20 70 61 72 73 65 20 2d 6b 65 65 70 45 6d  om parse -keepEm
a150: 70 74 69 65 73 20 24 78 73 6c 74 44 6f 63 20 78  pties $xsltDoc x
a160: 73 6c 74 64 6f 63 0a 20 20 20 20 24 78 6d 6c 64  sltdoc.    $xmld
a170: 6f 63 20 78 73 6c 74 20 24 78 73 6c 74 64 6f 63  oc xslt $xsltdoc
a180: 20 72 65 73 75 6c 74 44 6f 63 0a 20 20 20 20 73   resultDoc.    s
a190: 65 74 20 72 65 73 75 6c 74 20 5b 24 72 65 73 75  et result [$resu
a1a0: 6c 74 44 6f 63 20 61 73 58 4d 4c 20 2d 69 6e 64  ltDoc asXML -ind
a1b0: 65 6e 74 20 6e 6f 6e 65 5d 0a 20 20 20 20 24 78  ent none].    $x
a1c0: 6d 6c 64 6f 63 20 64 65 6c 65 74 65 0a 20 20 20  mldoc delete.   
a1d0: 20 24 78 73 6c 74 64 6f 63 20 64 65 6c 65 74 65   $xsltdoc delete
a1e0: 0a 20 20 20 20 24 72 65 73 75 6c 74 44 6f 63 20  .    $resultDoc 
a1f0: 64 65 6c 65 74 65 0a 20 20 20 20 73 65 74 20 72  delete.    set r
a200: 65 73 75 6c 74 0a 7d 20 7b 74 65 78 74 7d 0a 0a  esult.} {text}..
a210: 74 65 73 74 20 78 73 6c 74 2d 38 2e 38 20 7b 41  test xslt-8.8 {A
a220: 6c 6d 6f 73 74 20 6d 69 6e 69 6d 61 6c 20 78 73  lmost minimal xs
a230: 6c 74 20 31 2e 30 20 73 74 79 6c 65 73 68 65 65  lt 1.0 styleshee
a240: 74 7d 20 7b 0a 20 20 20 20 73 65 74 20 78 6d 6c  t} {.    set xml
a250: 44 6f 63 20 7b 3c 64 6f 63 3e 3c 63 68 69 6c 64  Doc {<doc><child
a260: 3e 74 65 78 74 3c 2f 63 68 69 6c 64 3e 3c 2f 64  >text</child></d
a270: 6f 63 3e 7d 0a 20 20 20 20 73 65 74 20 78 73 6c  oc>}.    set xsl
a280: 74 44 6f 63 20 7b 3c 78 73 6c 3a 73 74 79 6c 65  tDoc {<xsl:style
a290: 73 68 65 65 74 20 0a 20 20 20 20 20 20 20 20 78  sheet .        x
a2a0: 6d 6c 6e 73 3a 78 73 6c 3d 22 68 74 74 70 3a 2f  mlns:xsl="http:/
a2b0: 2f 77 77 77 2e 77 33 2e 6f 72 67 2f 31 39 39 39  /www.w3.org/1999
a2c0: 2f 58 53 4c 2f 54 72 61 6e 73 66 6f 72 6d 22 20  /XSL/Transform" 
a2d0: 76 65 72 73 69 6f 6e 3d 22 31 2e 30 22 3e 0a 20  version="1.0">. 
a2e0: 20 20 20 20 20 20 20 3c 78 73 6c 3a 74 65 6d 70         <xsl:temp
a2f0: 6c 61 74 65 20 6d 61 74 63 68 3d 22 2f 22 2f 3e  late match="/"/>
a300: 0a 20 20 20 20 20 20 20 20 3c 2f 78 73 6c 3a 73  .        </xsl:s
a310: 74 79 6c 65 73 68 65 65 74 3e 7d 0a 20 20 20 20  tylesheet>}.    
a320: 64 6f 6d 20 70 61 72 73 65 20 2d 6b 65 65 70 45  dom parse -keepE
a330: 6d 70 74 69 65 73 20 24 78 6d 6c 44 6f 63 20 78  mpties $xmlDoc x
a340: 6d 6c 64 6f 63 0a 20 20 20 20 64 6f 6d 20 70 61  mldoc.    dom pa
a350: 72 73 65 20 2d 6b 65 65 70 45 6d 70 74 69 65 73  rse -keepEmpties
a360: 20 24 78 73 6c 74 44 6f 63 20 78 73 6c 74 64 6f   $xsltDoc xsltdo
a370: 63 0a 20 20 20 20 24 78 6d 6c 64 6f 63 20 78 73  c.    $xmldoc xs
a380: 6c 74 20 24 78 73 6c 74 64 6f 63 20 72 65 73 75  lt $xsltdoc resu
a390: 6c 74 44 6f 63 0a 20 20 20 20 73 65 74 20 72 65  ltDoc.    set re
a3a0: 73 75 6c 74 20 5b 24 72 65 73 75 6c 74 44 6f 63  sult [$resultDoc
a3b0: 20 61 73 58 4d 4c 20 2d 69 6e 64 65 6e 74 20 6e   asXML -indent n
a3c0: 6f 6e 65 5d 0a 20 20 20 20 24 78 6d 6c 64 6f 63  one].    $xmldoc
a3d0: 20 64 65 6c 65 74 65 0a 20 20 20 20 24 78 73 6c   delete.    $xsl
a3e0: 74 64 6f 63 20 64 65 6c 65 74 65 0a 20 20 20 20  tdoc delete.    
a3f0: 24 72 65 73 75 6c 74 44 6f 63 20 64 65 6c 65 74  $resultDoc delet
a400: 65 0a 20 20 20 20 73 65 74 20 72 65 73 75 6c 74  e.    set result
a410: 0a 7d 20 7b 7d 0a 0a 74 65 73 74 20 78 73 6c 74  .} {}..test xslt
a420: 2d 38 2e 39 20 7b 66 6f 72 6d 61 74 2d 6e 75 6d  -8.9 {format-num
a430: 62 65 72 7d 20 7b 6b 6e 6f 77 6e 42 75 67 7d 20  ber} {knownBug} 
a440: 7b 0a 20 20 20 20 73 65 74 20 78 6d 6c 44 6f 63  {.    set xmlDoc
a450: 20 5b 64 6f 6d 20 70 61 72 73 65 20 3c 64 6f 63   [dom parse <doc
a460: 2f 3e 5d 0a 20 20 20 20 73 65 74 20 78 73 6c 74  />].    set xslt
a470: 44 6f 63 20 5b 64 6f 6d 20 70 61 72 73 65 20 7b  Doc [dom parse {
a480: 3c 78 73 6c 3a 73 74 79 6c 65 73 68 65 65 74 0a  <xsl:stylesheet.
a490: 20 20 20 20 20 20 20 20 78 6d 6c 6e 73 3a 78 73          xmlns:xs
a4a0: 6c 3d 22 68 74 74 70 3a 2f 2f 77 77 77 2e 77 33  l="http://www.w3
a4b0: 2e 6f 72 67 2f 31 39 39 39 2f 58 53 4c 2f 54 72  .org/1999/XSL/Tr
a4c0: 61 6e 73 66 6f 72 6d 22 20 76 65 72 73 69 6f 6e  ansform" version
a4d0: 3d 22 31 2e 30 22 3e 0a 20 20 20 20 20 20 20 20  ="1.0">.        
a4e0: 3c 78 73 6c 3a 74 65 6d 70 6c 61 74 65 20 6d 61  <xsl:template ma
a4f0: 74 63 68 3d 22 2f 22 3e 0a 20 20 20 20 20 20 20  tch="/">.       
a500: 20 3c 6f 75 74 3e 3c 78 73 6c 3a 76 61 6c 75 65   <out><xsl:value
a510: 2d 6f 66 20 73 65 6c 65 63 74 3d 22 66 6f 72 6d  -of select="form
a520: 61 74 2d 6e 75 6d 62 65 72 28 31 2e 30 2c 20 27  at-number(1.0, '
a530: 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30  0000000000000000
a540: 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30  0000000000000000
a550: 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30  0000000000000000
a560: 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30  0000000000000000
a570: 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30  0000000000000000
a580: 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30  0000000000000000
a590: 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30  0000000000000000
a5a0: 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30  0000000000000000
a5b0: 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30  0000000000000000
a5c0: 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30  0000000000000000
a5d0: 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30  0000000000000000
a5e0: 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30  0000000000000000
a5f0: 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30  0000000000000000
a600: 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30  0000000000000000
a610: 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30  0000000000000000
a620: 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 27  000000000000000'
a630: 29 22 2f 3e 3c 2f 6f 75 74 3e 0a 20 20 20 20 20  )"/></out>.     
a640: 20 20 20 3c 2f 78 73 6c 3a 74 65 6d 70 6c 61 74     </xsl:templat
a650: 65 3e 0a 20 20 20 20 20 20 20 20 3c 2f 78 73 6c  e>.        </xsl
a660: 3a 73 74 79 6c 65 73 68 65 65 74 3e 7d 5d 0a 20  :stylesheet>}]. 
a670: 20 20 20 24 78 6d 6c 44 6f 63 20 78 73 6c 74 20     $xmlDoc xslt 
a680: 24 78 73 6c 74 44 6f 63 20 72 65 73 75 6c 74 44  $xsltDoc resultD
a690: 6f 63 0a 20 20 20 20 73 65 74 20 72 65 73 75 6c  oc.    set resul
a6a0: 74 20 5b 24 72 65 73 75 6c 74 44 6f 63 20 61 73  t [$resultDoc as
a6b0: 58 4d 4c 20 2d 69 6e 64 65 6e 74 20 6e 6f 6e 65  XML -indent none
a6c0: 5d 0a 20 20 20 20 24 78 6d 6c 44 6f 63 20 64 65  ].    $xmlDoc de
a6d0: 6c 65 74 65 0a 20 20 20 20 24 78 73 6c 74 44 6f  lete.    $xsltDo
a6e0: 63 20 64 65 6c 65 74 65 0a 20 20 20 20 24 72 65  c delete.    $re
a6f0: 73 75 6c 74 44 6f 63 20 64 65 6c 65 74 65 0a 20  sultDoc delete. 
a700: 20 20 20 73 65 74 20 72 65 73 75 6c 74 20 3c 6f     set result <o
a710: 75 74 3e 30 30 31 3c 2f 6f 75 74 3e 0a 7d 20 7b  ut>001</out>.} {
a720: 3c 6f 75 74 3e 30 30 31 3c 2f 6f 75 74 3e 7d 0a  <out>001</out>}.
a730: 0a 70 72 6f 63 20 3a 3a 64 6f 6d 3a 3a 78 70 61  .proc ::dom::xpa
a740: 74 68 46 75 6e 63 3a 3a 78 73 6c 74 2d 39 2e 31  thFunc::xslt-9.1
a750: 20 7b 63 74 78 4e 6f 64 65 20 70 6f 73 20 6e 6f   {ctxNode pos no
a760: 64 65 4c 69 73 74 54 79 70 65 20 6e 6f 64 65 4c  deListType nodeL
a770: 69 73 74 20 61 72 67 73 7d 20 7b 0a 20 20 20 20  ist args} {.    
a780: 69 66 20 7b 5b 6c 6c 65 6e 67 74 68 20 24 63 74  if {[llength $ct
a790: 78 4e 6f 64 65 5d 20 21 3d 20 32 7d 20 7b 0a 20  xNode] != 2} {. 
a7a0: 20 20 20 20 20 20 20 65 72 72 6f 72 20 22 3a 3a         error "::
a7b0: 64 6f 6d 3a 3a 78 70 61 74 68 46 75 6e 63 3a 3a  dom::xpathFunc::
a7c0: 78 73 6c 74 2d 39 2e 31 3a 20 65 78 70 65 63 74  xslt-9.1: expect
a7d0: 65 64 20 70 61 72 65 6e 74 20 6e 6f 64 65 20 2f  ed parent node /
a7e0: 20 61 74 74 72 69 62 75 74 65 20 5c 0a 20 20 20   attribute \.   
a7f0: 20 20 20 20 20 20 20 20 20 20 20 20 6e 61 6d 65              name
a800: 20 6c 69 73 74 20 61 73 20 66 69 72 73 74 20 61   list as first a
a810: 72 67 75 6d 65 6e 74 2e 22 0a 20 20 20 20 7d 0a  rgument.".    }.
a820: 20 20 20 20 72 65 74 75 72 6e 20 7b 73 74 72 69      return {stri
a830: 6e 67 20 22 62 61 72 22 7d 0a 7d 0a 0a 74 65 73  ng "bar"}.}..tes
a840: 74 20 78 73 6c 74 2d 39 2e 31 20 7b 78 73 6c 74  t xslt-9.1 {xslt
a850: 20 75 73 69 6e 67 20 73 63 72 69 70 74 65 64 20   using scripted 
a860: 78 70 61 74 68 20 66 75 6e 63 74 69 6f 6e 7d 20  xpath function} 
a870: 2d 73 65 74 75 70 20 7b 0a 20 20 20 20 73 65 74  -setup {.    set
a880: 20 78 6d 6c 20 7b 3c 61 3e 3c 62 20 73 74 61 72   xml {<a><b star
a890: 74 3d 22 66 6f 6f 22 3e 3c 63 2f 3e 3c 2f 62 3e  t="foo"><c/></b>
a8a0: 3c 2f 61 3e 7d 0a 20 20 20 20 73 65 74 20 78 73  </a>}.    set xs
a8b0: 6c 20 7b 3c 78 73 6c 3a 74 72 61 6e 73 66 6f 72  l {<xsl:transfor
a8c0: 6d 20 78 6d 6c 6e 73 3a 78 73 6c 3d 22 68 74 74  m xmlns:xsl="htt
a8d0: 70 3a 2f 2f 77 77 77 2e 77 33 2e 6f 72 67 2f 31  p://www.w3.org/1
a8e0: 39 39 39 2f 58 53 4c 2f 54 72 61 6e 73 66 6f 72  999/XSL/Transfor
a8f0: 6d 22 20 0a 20 20 20 20 20 20 20 20 76 65 72 73  m" .        vers
a900: 69 6f 6e 3d 22 31 2e 30 22 3e 0a 20 20 3c 78 73  ion="1.0">.  <xs
a910: 6c 3a 74 65 6d 70 6c 61 74 65 20 6d 61 74 63 68  l:template match
a920: 3d 22 40 2a 20 7c 20 6e 6f 64 65 28 29 22 3e 0a  ="@* | node()">.
a930: 20 20 20 20 3c 78 73 6c 3a 63 6f 70 79 3e 0a 20      <xsl:copy>. 
a940: 20 20 20 20 20 3c 78 73 6c 3a 61 70 70 6c 79 2d       <xsl:apply-
a950: 74 65 6d 70 6c 61 74 65 73 20 73 65 6c 65 63 74  templates select
a960: 3d 22 40 2a 20 7c 20 6e 6f 64 65 28 29 22 2f 3e  ="@* | node()"/>
a970: 0a 20 20 20 20 3c 2f 78 73 6c 3a 63 6f 70 79 3e  .    </xsl:copy>
a980: 0a 20 20 3c 2f 78 73 6c 3a 74 65 6d 70 6c 61 74  .  </xsl:templat
a990: 65 3e 20 20 20 20 20 20 20 20 20 0a 20 20 3c 78  e>         .  <x
a9a0: 73 6c 3a 74 65 6d 70 6c 61 74 65 20 6d 61 74 63  sl:template matc
a9b0: 68 3d 22 40 73 74 61 72 74 22 3e 0a 20 20 20 20  h="@start">.    
a9c0: 3c 78 73 6c 3a 61 74 74 72 69 62 75 74 65 20 6e  <xsl:attribute n
a9d0: 61 6d 65 3d 22 73 74 61 72 74 22 3e 0a 20 20 20  ame="start">.   
a9e0: 20 20 20 3c 78 73 6c 3a 76 61 6c 75 65 2d 6f 66     <xsl:value-of
a9f0: 20 73 65 6c 65 63 74 3d 22 78 73 6c 74 2d 39 2e   select="xslt-9.
aa00: 31 28 2e 29 22 2f 3e 0a 20 20 20 20 3c 2f 78 73  1(.)"/>.    </xs
aa10: 6c 3a 61 74 74 72 69 62 75 74 65 3e 0a 20 20 3c  l:attribute>.  <
aa20: 2f 78 73 6c 3a 74 65 6d 70 6c 61 74 65 3e 0a 3c  /xsl:template>.<
aa30: 2f 78 73 6c 3a 74 72 61 6e 73 66 6f 72 6d 3e 7d  /xsl:transform>}
aa40: 0a 20 20 20 20 73 65 74 20 78 73 6c 74 44 6f 63  .    set xsltDoc
aa50: 20 5b 64 6f 6d 20 70 61 72 73 65 20 2d 6b 65 65   [dom parse -kee
aa60: 70 45 6d 70 74 69 65 73 20 24 78 73 6c 5d 0a 20  pEmpties $xsl]. 
aa70: 20 20 20 73 65 74 20 78 6d 6c 44 6f 63 20 5b 64     set xmlDoc [d
aa80: 6f 6d 20 70 61 72 73 65 20 24 78 6d 6c 5d 0a 7d  om parse $xml].}
aa90: 20 2d 62 6f 64 79 20 7b 0a 20 20 20 20 24 78 6d   -body {.    $xm
aaa0: 6c 44 6f 63 20 78 73 6c 74 20 24 78 73 6c 74 44  lDoc xslt $xsltD
aab0: 6f 63 20 72 65 73 75 6c 74 44 6f 63 0a 20 20 20  oc resultDoc.   
aac0: 20 24 72 65 73 75 6c 74 44 6f 63 20 61 73 58 4d   $resultDoc asXM
aad0: 4c 20 2d 69 6e 64 65 6e 74 20 6e 6f 6e 65 0a 7d  L -indent none.}
aae0: 20 2d 63 6c 65 61 6e 75 70 20 7b 0a 20 20 20 20   -cleanup {.    
aaf0: 24 78 73 6c 74 44 6f 63 20 64 65 6c 65 74 65 0a  $xsltDoc delete.
ab00: 20 20 20 20 24 78 6d 6c 44 6f 63 20 64 65 6c 65      $xmlDoc dele
ab10: 74 65 0a 20 20 20 20 24 72 65 73 75 6c 74 44 6f  te.    $resultDo
ab20: 63 20 64 65 6c 65 74 65 0a 7d 20 2d 72 65 73 75  c delete.} -resu
ab30: 6c 74 20 7b 3c 61 3e 3c 62 20 73 74 61 72 74 3d  lt {<a><b start=
ab40: 22 62 61 72 22 3e 3c 63 2f 3e 3c 2f 62 3e 3c 2f  "bar"><c/></b></
ab50: 61 3e 7d 0a 0a 23 20 42 65 6c 6f 77 20 69 73 20  a>}..# Below is 
ab60: 63 6f 64 65 2c 20 77 68 69 63 68 20 72 65 70 6c  code, which repl
ab70: 61 63 65 73 20 74 68 65 20 64 6f 6d 20 63 6d 64  aces the dom cmd
ab80: 20 77 69 74 68 20 61 20 76 65 72 73 69 6f 6e 2c   with a version,
ab90: 20 77 68 69 63 68 20 70 61 72 73 65 73 0a 23 20   which parses.# 
aba0: 74 68 65 20 78 6d 6c 20 69 6e 74 6f 20 61 20 64  the xml into a d
abb0: 6f 6d 20 74 72 65 65 2c 20 74 68 65 6e 20 74 72  om tree, then tr
abc0: 61 6e 73 66 6f 72 6d 61 74 69 6f 6e 73 20 74 68  ansformations th
abd0: 69 73 20 64 6f 6d 20 74 72 65 65 20 77 69 74 68  is dom tree with
abe0: 20 74 68 65 0a 23 20 78 73 6c 74 20 69 64 65 6e   the.# xslt iden
abf0: 74 69 74 79 20 74 72 61 6e 73 66 6f 72 6d 61 74  tity transformat
ac00: 69 6f 6e 20 61 6e 64 20 72 65 74 75 72 6e 73 20  ion and returns 
ac10: 74 68 65 20 72 65 73 75 6c 74 20 74 72 65 65 20  the result tree 
ac20: 6f 66 20 74 68 61 74 0a 23 20 74 72 61 6e 73 66  of that.# transf
ac30: 6f 72 6d 61 74 69 6f 6e 2e 20 54 68 69 73 20 69  ormation. This i
ac40: 73 20 75 73 65 64 20 74 6f 20 74 65 73 74 2c 20  s used to test, 
ac50: 74 68 61 74 20 74 68 65 20 72 65 73 75 6c 74 20  that the result 
ac60: 74 72 65 65 20 6f 66 20 61 6e 20 78 73 6c 74 0a  tree of an xslt.
ac70: 23 20 74 72 61 6e 73 66 6f 72 6d 61 74 69 6f 6e  # transformation
ac80: 20 63 6f 75 6c 64 20 62 65 20 75 73 65 64 20 61   could be used a
ac90: 73 20 61 6e 79 20 27 6f 72 64 69 6e 61 72 79 27  s any 'ordinary'
aca0: 20 74 72 65 65 20 63 72 65 61 74 65 64 20 77 69   tree created wi
acb0: 74 68 0a 23 20 5b 64 6f 6d 20 70 61 72 73 65 5d  th.# [dom parse]
acc0: 2e 20 49 74 20 69 73 20 68 65 72 65 2c 20 62 65  . It is here, be
acd0: 63 61 75 73 65 20 49 20 64 69 64 6e 27 74 20 77  cause I didn't w
ace0: 61 6e 74 20 74 6f 20 68 6f 6c 64 20 69 74 20 73  ant to hold it s
acf0: 65 70 61 72 61 74 65 64 2e 0a 23 20 49 74 20 69  eparated..# It i
ad00: 73 20 63 6f 6d 6d 65 6e 74 65 64 20 6f 75 74 2c  s commented out,
ad10: 20 62 65 63 61 75 73 65 20 73 6f 6d 65 20 6f 66   because some of
ad20: 20 74 68 65 20 74 65 73 74 73 20 69 6e 20 74 68   the tests in th
ad30: 65 20 73 6f 75 72 63 65 64 20 74 65 73 74 20 66  e sourced test f
ad40: 69 6c 65 73 0a 23 20 6e 65 65 64 20 6c 69 6e 65  iles.# need line
ad50: 2f 63 6f 6c 75 6d 6e 20 6f 72 20 62 61 73 65 55  /column or baseU
ad60: 52 49 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 2c 20  RI information, 
ad70: 74 6f 20 77 6f 72 6b 20 63 6f 72 72 65 63 74 6c  to work correctl
ad80: 79 2c 20 61 6e 64 20 74 68 69 73 0a 23 20 69 6e  y, and this.# in
ad90: 66 6f 72 6d 61 74 69 6f 6e 20 69 73 20 6e 6f 74  formation is not
ada0: 20 70 72 65 73 65 72 76 65 64 20 62 79 20 61 6e   preserved by an
adb0: 20 78 73 6c 74 20 69 64 65 6e 74 69 74 79 20 74   xslt identity t
adc0: 72 61 6e 73 66 6f 72 6d 61 74 69 6f 6e 20 61 6e  ransformation an
add0: 64 0a 23 20 49 20 77 61 73 20 75 70 20 74 6f 20  d.# I was up to 
ade0: 6e 6f 77 20 74 6f 6f 20 6c 61 7a 79 2c 20 74 6f  now too lazy, to
adf0: 20 74 72 69 63 6b 20 61 72 6f 75 6e 64 20 74 68   trick around th
ae00: 69 73 20 66 65 77 20 74 65 73 74 73 20 77 69 74  is few tests wit
ae10: 68 20 73 6f 6d 65 0a 23 20 74 65 73 74 20 63 6f  h some.# test co
ae20: 6e 73 74 72 61 69 6e 74 73 2e 0a 23 20 0a 23 20  nstraints..# .# 
ae30: 73 65 74 20 69 64 65 6e 74 69 74 79 54 72 61 6e  set identityTran
ae40: 73 66 6f 72 6d 61 74 69 6f 6e 20 5b 64 6f 6d 20  sformation [dom 
ae50: 70 61 72 73 65 20 7b 3c 78 73 6c 3a 73 74 79 6c  parse {<xsl:styl
ae60: 65 73 68 65 65 74 20 76 65 72 73 69 6f 6e 3d 22  esheet version="
ae70: 31 2e 30 22 0a 23 20 20 78 6d 6c 6e 73 3a 78 73  1.0".#  xmlns:xs
ae80: 6c 3d 22 68 74 74 70 3a 2f 2f 77 77 77 2e 77 33  l="http://www.w3
ae90: 2e 6f 72 67 2f 31 39 39 39 2f 58 53 4c 2f 54 72  .org/1999/XSL/Tr
aea0: 61 6e 73 66 6f 72 6d 22 3e 0a 23 20 3c 78 73 6c  ansform">.# <xsl
aeb0: 3a 74 65 6d 70 6c 61 74 65 20 6d 61 74 63 68 3d  :template match=
aec0: 22 40 2a 7c 6e 6f 64 65 28 29 22 3e 0a 23 20 20  "@*|node()">.#  
aed0: 20 3c 78 73 6c 3a 63 6f 70 79 3e 0a 23 20 20 20   <xsl:copy>.#   
aee0: 20 20 3c 78 73 6c 3a 61 70 70 6c 79 2d 74 65 6d    <xsl:apply-tem
aef0: 70 6c 61 74 65 73 20 73 65 6c 65 63 74 3d 22 40  plates select="@
af00: 2a 7c 6e 6f 64 65 28 29 22 2f 3e 0a 23 20 20 20  *|node()"/>.#   
af10: 3c 2f 78 73 6c 3a 63 6f 70 79 3e 0a 23 20 3c 2f  </xsl:copy>.# </
af20: 78 73 6c 3a 74 65 6d 70 6c 61 74 65 3e 0a 23 20  xsl:template>.# 
af30: 20 20 20 20 3c 2f 78 73 6c 3a 73 74 79 6c 65 73      </xsl:styles
af40: 68 65 65 74 3e 7d 5d 0a 0a 23 20 72 65 6e 61 6d  heet>}]..# renam
af50: 65 20 64 6f 6d 20 5f 64 6f 6d 0a 0a 23 20 70 72  e dom _dom..# pr
af60: 6f 63 20 64 6f 6d 20 7b 61 72 67 73 7d 20 7b 0a  oc dom {args} {.
af70: 23 20 20 20 20 20 67 6c 6f 62 61 6c 20 69 64 65  #     global ide
af80: 6e 74 69 74 79 54 72 61 6e 73 66 6f 72 6d 61 74  ntityTransformat
af90: 69 6f 6e 0a 0a 23 20 20 20 20 20 73 77 69 74 63  ion..#     switc
afa0: 68 20 5b 6c 69 6e 64 65 78 20 24 61 72 67 73 20  h [lindex $args 
afb0: 30 5d 20 7b 0a 23 20 20 20 20 20 20 20 20 20 22  0] {.#         "
afc0: 70 61 72 73 65 22 20 7b 0a 23 20 20 20 20 20 20  parse" {.#      
afd0: 20 20 20 20 20 20 20 73 65 74 20 72 65 73 75 6c         set resul
afe0: 74 64 6f 63 20 5b 75 70 6c 65 76 65 6c 20 31 20  tdoc [uplevel 1 
aff0: 5b 6c 69 6e 73 65 72 74 20 24 61 72 67 73 20 30  [linsert $args 0
b000: 20 5f 64 6f 6d 5d 5d 0a 23 20 20 20 20 20 20 20   _dom]].#       
b010: 20 20 20 20 20 20 72 65 74 75 72 6e 20 5b 24 72        return [$r
b020: 65 73 75 6c 74 64 6f 63 20 78 73 6c 74 20 24 69  esultdoc xslt $i
b030: 64 65 6e 74 69 74 79 54 72 61 6e 73 66 6f 72 6d  dentityTransform
b040: 61 74 69 6f 6e 5d 0a 23 20 20 20 20 20 20 20 20  ation].#        
b050: 20 7d 0a 23 20 20 20 20 20 20 20 20 20 64 65 66   }.#         def
b060: 61 75 6c 74 20 7b 0a 23 20 20 20 20 20 20 20 20  ault {.#        
b070: 20 20 20 20 20 72 65 74 75 72 6e 20 5b 75 70 6c       return [upl
b080: 65 76 65 6c 20 31 20 5b 6c 69 6e 73 65 72 74 20  evel 1 [linsert 
b090: 24 61 72 67 73 20 30 20 5f 64 6f 6d 5d 5d 0a 23  $args 0 _dom]].#
b0a0: 20 20 20 20 20 20 20 20 20 7d 0a 23 20 20 20 20           }.#    
b0b0: 20 7d 0a 23 20 7d 20 20 20 20 20 20 20 20 20 20   }.# }          
b0c0: 20 20 0a 0a 23 20 73 6f 75 72 63 65 20 5b 66 69    ..# source [fi
b0d0: 6c 65 20 6a 6f 69 6e 20 5b 66 69 6c 65 20 64 69  le join [file di
b0e0: 72 20 5b 69 6e 66 6f 20 73 63 72 69 70 74 5d 5d  r [info script]]
b0f0: 20 69 31 38 6e 2e 74 65 73 74 5d 0a 23 20 73 6f   i18n.test].# so
b100: 75 72 63 65 20 5b 66 69 6c 65 20 6a 6f 69 6e 20  urce [file join 
b110: 5b 66 69 6c 65 20 64 69 72 20 5b 69 6e 66 6f 20  [file dir [info 
b120: 73 63 72 69 70 74 5d 5d 20 64 6f 6d 2e 74 65 73  script]] dom.tes
b130: 74 5d 0a 0a 23 20 72 65 6e 61 6d 65 20 64 6f 6d  t]..# rename dom
b140: 20 7b 7d 0a 23 20 72 65 6e 61 6d 65 20 5f 64 6f   {}.# rename _do
b150: 6d 20 64 6f 6d 0a 0a 23 20 63 6c 65 61 6e 75 70  m dom..# cleanup
b160: 0a 3a 3a 74 63 6c 74 65 73 74 3a 3a 63 6c 65 61  .::tcltest::clea
b170: 6e 75 70 54 65 73 74 73 0a 72 65 74 75 72 6e 0a  nupTests.return.