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"'<&
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.