PoshCode Archive  Hex Artifact Content

Artifact ae0cf04492bb3a984d0a563e6a563be3063771a379a3455715623c6d63d58f76:

  • File Xml-Module.ps1 — part of check-in [371e9dd006] at 2018-06-10 13:16:47 on branch trunk — A complete set of XML functionality (especially if you don’t have PSCX), including reading and writing xml files (import-xml, export-xml), selecting (via xpath), updating, transforming and creating new xml documents. (user: Joel Bennett size: 39691)

0000: 23 20 65 6e 63 6f 64 69 6e 67 3a 20 61 73 63 69  # encoding: asci
0010: 69 0d 0a 23 20 61 70 69 3a 20 70 6f 77 65 72 73  i..# api: powers
0020: 68 65 6c 6c 0d 0a 23 20 74 69 74 6c 65 3a 20 58  hell..# title: X
0030: 6d 6c 20 4d 6f 64 75 6c 65 0d 0a 23 20 64 65 73  ml Module..# des
0040: 63 72 69 70 74 69 6f 6e 3a 20 41 20 63 6f 6d 70  cription: A comp
0050: 6c 65 74 65 20 73 65 74 20 6f 66 20 58 4d 4c 20  lete set of XML 
0060: 66 75 6e 63 74 69 6f 6e 61 6c 69 74 79 20 28 65  functionality (e
0070: 73 70 65 63 69 61 6c 6c 79 20 69 66 20 79 6f 75  specially if you
0080: 20 64 6f 6e e2 80 99 74 20 68 61 76 65 20 50 53   don...t have PS
0090: 43 58 29 2c 20 69 6e 63 6c 75 64 69 6e 67 20 72  CX), including r
00a0: 65 61 64 69 6e 67 20 61 6e 64 20 77 72 69 74 69  eading and writi
00b0: 6e 67 20 78 6d 6c 20 66 69 6c 65 73 20 28 69 6d  ng xml files (im
00c0: 70 6f 72 74 2d 78 6d 6c 2c 20 65 78 70 6f 72 74  port-xml, export
00d0: 2d 78 6d 6c 29 2c 20 73 65 6c 65 63 74 69 6e 67  -xml), selecting
00e0: 20 28 76 69 61 20 78 70 61 74 68 29 2c 20 75 70   (via xpath), up
00f0: 64 61 74 69 6e 67 2c 20 74 72 61 6e 73 66 6f 72  dating, transfor
0100: 6d 69 6e 67 20 61 6e 64 20 63 72 65 61 74 69 6e  ming and creatin
0110: 67 20 6e 65 77 20 78 6d 6c 20 64 6f 63 75 6d 65  g new xml docume
0120: 6e 74 73 2e 0d 0a 23 20 76 65 72 73 69 6f 6e 3a  nts...# version:
0130: 20 36 2e 30 0d 0a 23 20 74 79 70 65 3a 20 66 75   6.0..# type: fu
0140: 6e 63 74 69 6f 6e 0d 0a 23 20 61 75 74 68 6f 72  nction..# author
0150: 3a 20 4a 6f 65 6c 20 42 65 6e 6e 65 74 74 0d 0a  : Joel Bennett..
0160: 23 20 6c 69 63 65 6e 73 65 3a 20 43 43 30 0d 0a  # license: CC0..
0170: 23 20 66 75 6e 63 74 69 6f 6e 3a 20 49 6d 70 6f  # function: Impo
0180: 72 74 2d 58 6d 6c 0d 0a 23 20 78 2d 70 6f 73 68  rt-Xml..# x-posh
0190: 63 6f 64 65 2d 69 64 3a 20 32 39 31 32 0d 0a 23  code-id: 2912..#
01a0: 20 78 2d 61 72 63 68 69 76 65 64 3a 20 32 30 31   x-archived: 201
01b0: 31 2d 30 38 2d 32 35 54 30 30 3a 32 31 3a 30 34  1-08-25T00:21:04
01c0: 0d 0a 23 20 78 2d 70 75 62 6c 69 73 68 65 64 3a  ..# x-published:
01d0: 20 32 30 31 31 2d 30 38 2d 31 32 54 31 31 3a 33   2011-08-12T11:3
01e0: 39 3a 30 30 0d 0a 23 0d 0a 23 20 49 6e 20 70 61  9:00..#..# In pa
01f0: 72 74 69 63 75 6c 61 72 3a 20 0d 0a 23 20 41 20  rticular: ..# A 
0200: 44 53 4c 20 66 6f 72 20 63 72 65 61 74 69 6e 67  DSL for creating
0210: 20 58 4d 4c 20 64 6f 63 75 6d 65 6e 74 73 2e 0d   XML documents..
0220: 0a 23 20 43 6f 6e 76 65 72 74 2d 58 6d 6c 20 77  .# Convert-Xml w
0230: 68 69 63 68 20 73 75 70 70 6f 72 74 73 20 70 61  hich supports pa
0240: 72 61 6d 65 74 65 72 73 20 73 6f 20 79 6f 75 20  rameters so you 
0250: 63 61 6e 20 75 73 65 20 58 53 4c 54 20 77 68 69  can use XSLT whi
0260: 63 68 20 72 65 71 75 69 72 65 20 70 61 72 61 6d  ch require param
0270: 65 74 65 72 73 0d 0a 23 20 53 65 6c 65 63 74 2d  eters..# Select-
0280: 58 4d 4c 20 77 68 69 63 68 20 6c 65 76 65 72 61  XML which levera
0290: 67 65 73 20 52 65 6d 6f 76 65 2d 58 6d 6c 4e 61  ges Remove-XmlNa
02a0: 6d 65 73 70 61 63 65 20 74 6f 20 73 69 6d 70 6c  mespace to simpl
02b0: 69 66 79 20 73 69 6d 70 6c 65 20 78 6d 6c 20 71  ify simple xml q
02c0: 75 65 72 69 65 73 20 62 79 20 61 6c 6c 6f 77 69  ueries by allowi
02d0: 6e 67 20 79 6f 75 20 74 6f 20 6c 65 61 76 65 20  ng you to leave 
02e0: 6f 75 74 20 74 68 65 20 6e 61 6d 65 73 70 61 63  out the namespac
02f0: 65 73 2e 20 49 74 20 69 73 20 69 6d 70 6f 72 74  es. It is import
0300: 61 6e 74 20 74 6f 20 6e 6f 74 65 20 74 68 61 74  ant to note that
0310: 20 74 68 69 73 20 6d 65 61 6e 73 20 74 68 61 74   this means that
0320: 20 74 68 65 20 72 65 74 75 72 6e 65 64 20 72 65   the returned re
0330: 73 75 6c 74 73 20 77 69 6c 6c 20 6e 6f 74 20 68  sults will not h
0340: 61 76 65 20 6e 61 6d 65 73 70 61 63 65 73 20 69  ave namespaces i
0350: 6e 20 74 68 65 6d 2c 20 65 76 65 6e 20 69 66 20  n them, even if 
0360: 74 68 65 20 69 6e 70 75 74 20 58 4d 4c 20 64 69  the input XML di
0370: 64 2e 0d 0a 23 20 41 4c 53 4f 20 4e 4f 54 45 3a  d...# ALSO NOTE:
0380: 20 6f 6e 6c 79 20 72 61 77 20 58 6d 6c 4e 6f 64   only raw XmlNod
0390: 65 73 20 61 72 65 20 72 65 74 75 72 6e 65 64 20  es are returned 
03a0: 66 72 6f 6d 20 53 65 6c 65 63 74 2d 58 6d 6c 2c  from Select-Xml,
03b0: 20 73 6f 20 74 68 65 20 6f 75 74 70 75 74 20 69   so the output i
03c0: 73 6e e2 80 99 74 20 63 6f 6d 70 61 74 69 62 6c  sn...t compatibl
03d0: 65 20 77 69 74 68 20 74 68 65 20 62 75 69 6c 74  e with the built
03e0: 20 69 6e 20 53 65 6c 65 63 74 2d 58 6d 6c 20 e2   in Select-Xml .
03f0: 80 94 20 69 6e 73 74 65 61 64 2c 20 69 74 e2 80  .. instead, it..
0400: 99 73 20 65 71 75 69 76 61 6c 65 6e 74 20 74 6f  .s equivalent to
0410: 20 75 73 69 6e 67 20 69 74 20 74 68 65 20 77 61   using it the wa
0420: 79 20 49 20 75 73 75 61 6c 6c 79 20 64 6f 3a 20  y I usually do: 
0430: 53 65 6c 65 63 74 2d 58 6d 6c 20 2e 2e 2e 20 7c  Select-Xml ... |
0440: 20 53 65 6c 65 63 74 2d 4f 62 6a 65 63 74 20 2d   Select-Object -
0450: 45 78 70 61 6e 64 20 4e 6f 64 65 0d 0a 23 20 55  Expand Node..# U
0460: 70 64 61 74 65 2d 58 6d 6c 20 77 68 69 63 68 20  pdate-Xml which 
0470: 61 6c 6c 6f 77 73 20 79 6f 75 20 74 6f 20 61 70  allows you to ap
0480: 70 65 6e 64 2c 20 69 6e 73 65 72 74 2c 20 72 65  pend, insert, re
0490: 6d 6f 76 65 2c 20 61 6e 64 20 72 65 70 6c 61 63  move, and replac
04a0: 65 20 76 61 6c 75 65 73 20 69 6e 20 58 4d 4c 20  e values in XML 
04b0: 44 6f 63 75 6d 65 6e 74 73 0d 0a 23 0d 0a 23 72  Documents..#..#r
04c0: 65 71 75 69 72 65 73 20 2d 76 65 72 73 69 6f 6e  equires -version
04d0: 20 32 2e 30 0d 0a 0d 0a 23 20 49 6d 70 72 6f 76   2.0....# Improv
04e0: 65 73 20 6f 76 65 72 20 74 68 65 20 62 75 69 6c  es over the buil
04f0: 74 2d 69 6e 20 53 65 6c 65 63 74 2d 58 4d 4c 20  t-in Select-XML 
0500: 62 79 20 6c 65 76 65 72 61 67 69 6e 67 20 52 65  by leveraging Re
0510: 6d 6f 76 65 2d 58 6d 6c 4e 61 6d 65 73 70 61 63  move-XmlNamespac
0520: 65 20 68 74 74 70 60 3a 2f 2f 70 6f 73 68 63 6f  e http`://poshco
0530: 64 65 2e 6f 72 67 2f 31 34 39 32 20 0d 0a 23 20  de.org/1492 ..# 
0540: 74 6f 20 70 72 6f 76 69 64 65 20 61 20 2d 52 65  to provide a -Re
0550: 6d 6f 76 65 4e 61 6d 65 73 70 61 63 65 20 70 61  moveNamespace pa
0560: 72 61 6d 65 74 65 72 20 2d 2d 20 69 66 20 69 74  rameter -- if it
0570: 27 73 20 73 75 70 70 6c 69 65 64 2c 20 61 6c 6c  's supplied, all
0580: 20 6f 66 20 74 68 65 20 6e 61 6d 65 73 70 61 63   of the namespac
0590: 65 20 64 65 63 6c 61 72 61 74 69 6f 6e 73 20 0d  e declarations .
05a0: 0a 23 20 61 6e 64 20 70 72 65 66 69 78 65 73 20  .# and prefixes 
05b0: 61 72 65 20 72 65 6d 6f 76 65 64 20 66 72 6f 6d  are removed from
05c0: 20 61 6c 6c 20 58 4d 4c 20 6e 6f 64 65 73 20 28   all XML nodes (
05d0: 62 79 20 61 6e 20 58 53 4c 20 74 72 61 6e 73 66  by an XSL transf
05e0: 6f 72 6d 29 20 62 65 66 6f 72 65 20 73 65 61 72  orm) before sear
05f0: 63 68 69 6e 67 2e 20 0d 0a 23 20 49 4d 50 4f 52  ching. ..# IMPOR
0600: 54 41 4e 54 3a 20 72 65 74 75 72 6e 65 64 20 72  TANT: returned r
0610: 65 73 75 6c 74 73 20 2a 77 69 6c 6c 20 6e 6f 74  esults *will not
0620: 2a 20 68 61 76 65 20 6e 61 6d 65 73 70 61 63 65  * have namespace
0630: 73 20 69 6e 20 74 68 65 6d 2c 20 65 76 65 6e 20  s in them, even 
0640: 69 66 20 74 68 65 20 69 6e 70 75 74 20 58 4d 4c  if the input XML
0650: 20 64 69 64 2e 20 0d 0a 0d 0a 23 20 41 6c 73 6f   did. ....# Also
0660: 2c 20 6f 6e 6c 79 20 72 61 77 20 58 6d 6c 4e 6f  , only raw XmlNo
0670: 64 65 73 20 61 72 65 20 72 65 74 75 72 6e 65 64  des are returned
0680: 20 66 72 6f 6d 20 74 68 69 73 20 66 75 6e 63 74   from this funct
0690: 69 6f 6e 2c 20 73 6f 20 74 68 65 20 6f 75 74 70  ion, so the outp
06a0: 75 74 20 69 73 6e 27 74 20 63 6f 6d 70 6c 65 74  ut isn't complet
06b0: 65 6c 79 20 63 6f 6d 70 61 74 69 62 6c 65 20 0d  ely compatible .
06c0: 0a 23 20 77 69 74 68 20 74 68 65 20 62 75 69 6c  .# with the buil
06d0: 74 20 69 6e 20 53 65 6c 65 63 74 2d 58 6d 6c 2e  t in Select-Xml.
06e0: 20 49 74 27 73 20 65 71 75 69 76 61 6c 65 6e 74   It's equivalent
06f0: 20 74 6f 20 75 73 69 6e 67 20 53 65 6c 65 63 74   to using Select
0700: 2d 58 6d 6c 20 2e 2e 2e 20 7c 20 53 65 6c 65 63  -Xml ... | Selec
0710: 74 2d 4f 62 6a 65 63 74 20 2d 45 78 70 61 6e 64  t-Object -Expand
0720: 20 4e 6f 64 65 0d 0a 0d 0a 23 20 56 65 72 73 69   Node....# Versi
0730: 6f 6e 20 48 69 73 74 6f 72 79 3a 0d 0a 23 20 53  on History:..# S
0740: 65 6c 65 63 74 2d 58 6d 6c 20 32 2e 30 20 54 68  elect-Xml 2.0 Th
0750: 69 73 20 77 61 73 20 74 68 65 20 66 69 72 73 74  is was the first
0760: 20 73 63 72 69 70 74 20 76 65 72 73 69 6f 6e 20   script version 
0770: 49 20 77 72 6f 74 65 2e 0d 0a 23 20 20 20 20 20  I wrote...#     
0780: 20 20 20 20 20 20 20 20 20 20 20 69 74 20 64 69             it di
0790: 64 6e 27 74 20 66 75 6e 63 74 69 6f 6e 20 69 64  dn't function id
07a0: 65 6e 74 69 63 61 6c 6c 79 20 74 6f 20 74 68 65  entically to the
07b0: 20 62 75 69 6c 74 2d 69 6e 20 53 65 6c 65 63 74   built-in Select
07c0: 2d 58 6d 6c 20 77 69 74 68 20 72 65 67 61 72 64  -Xml with regard
07d0: 73 20 74 6f 20 70 61 72 61 6d 65 74 65 72 20 70  s to parameter p
07e0: 61 72 73 69 6e 67 0d 0a 23 20 53 65 6c 65 63 74  arsing..# Select
07f0: 2d 58 6d 6c 20 32 2e 31 20 4d 61 74 63 68 65 64  -Xml 2.1 Matched
0800: 20 74 68 65 20 62 75 69 6c 74 2d 69 6e 20 53 65   the built-in Se
0810: 6c 65 63 74 2d 58 6d 6c 20 70 61 72 61 6d 65 74  lect-Xml paramet
0820: 65 72 20 73 65 74 73 2c 20 69 74 27 73 20 6e 6f  er sets, it's no
0830: 77 20 61 20 64 72 6f 70 2d 69 6e 20 72 65 70 6c  w a drop-in repl
0840: 61 63 65 6d 65 6e 74 20 0d 0a 23 20 20 20 20 20  acement ..#     
0850: 20 20 20 20 20 20 20 20 20 20 20 42 55 54 20 6f             BUT o
0860: 6e 6c 79 20 69 66 20 79 6f 75 20 77 65 72 65 20  nly if you were 
0870: 75 73 69 6e 67 20 74 68 65 20 6f 72 69 67 69 6e  using the origin
0880: 61 6c 20 77 69 74 68 3a 20 53 65 6c 65 63 74 2d  al with: Select-
0890: 58 6d 6c 20 2e 2e 2e 20 7c 20 53 65 6c 65 63 74  Xml ... | Select
08a0: 2d 4f 62 6a 65 63 74 20 2d 45 78 70 61 6e 64 20  -Object -Expand 
08b0: 4e 6f 64 65 0d 0a 23 20 53 65 6c 65 63 74 2d 58  Node..# Select-X
08c0: 6d 6c 20 32 2e 32 20 46 69 78 65 73 20 61 20 62  ml 2.2 Fixes a b
08d0: 75 67 20 69 6e 20 74 68 65 20 2d 43 6f 6e 74 65  ug in the -Conte
08e0: 6e 74 20 70 61 72 61 6d 65 74 65 72 73 65 74 20  nt parameterset 
08f0: 77 68 65 72 65 20 2d 52 65 6d 6f 76 65 4e 61 6d  where -RemoveNam
0900: 65 73 70 61 63 65 20 77 61 73 20 2a 70 72 65 73  espace was *pres
0910: 75 6d 65 64 2a 0d 0a 23 20 56 65 72 73 69 6f 6e  umed*..# Version
0920: 20 20 20 20 33 2e 30 20 41 64 64 65 64 20 4e 65      3.0 Added Ne
0930: 77 2d 58 44 6f 63 75 6d 65 6e 74 20 61 6e 64 20  w-XDocument and 
0940: 61 73 73 6f 63 69 61 74 65 64 20 67 65 6e 65 72  associated gener
0950: 61 74 69 6f 6e 20 66 75 6e 63 74 69 6f 6e 73 20  ation functions 
0960: 66 6f 72 20 6d 79 20 58 4d 4c 20 44 53 4c 0d 0a  for my XML DSL..
0970: 23 20 56 65 72 73 69 6f 6e 20 20 20 20 33 2e 31  # Version    3.1
0980: 20 46 69 78 65 64 20 61 20 72 65 61 6c 6c 79 20   Fixed a really 
0990: 75 67 6c 79 20 62 75 67 20 69 6e 20 4e 65 77 2d  ugly bug in New-
09a0: 58 44 6f 63 75 6d 65 6e 74 20 69 6e 20 33 2e 30  XDocument in 3.0
09b0: 20 77 68 69 63 68 20 49 20 73 68 6f 75 6c 64 20   which I should 
09c0: 6e 6f 74 20 68 61 76 65 20 72 65 6c 65 61 73 65  not have release
09d0: 64 0d 0a 23 20 56 65 72 73 69 6f 6e 20 20 20 20  d..# Version    
09e0: 34 2e 30 20 4e 65 76 65 72 20 63 6f 6e 74 65 6e  4.0 Never conten
09f0: 74 20 74 6f 20 6c 65 61 76 65 20 77 65 6c 6c 20  t to leave well 
0a00: 65 6e 6f 75 67 68 20 61 6c 6f 6e 65 2c 20 49 27  enough alone, I'
0a10: 76 65 20 63 6f 6d 70 6c 65 74 65 6c 79 20 72 65  ve completely re
0a20: 77 6f 72 6b 65 64 20 4e 65 77 2d 58 44 6f 63 75  worked New-XDocu
0a30: 6d 65 6e 74 0d 0a 23 20 56 65 72 73 69 6f 6e 20  ment..# Version 
0a40: 20 20 20 34 2e 31 20 54 77 65 61 6b 65 64 20 6e     4.1 Tweaked n
0a50: 61 6d 65 73 70 61 63 65 73 20 61 67 61 69 6e 20  amespaces again 
0a60: 73 6f 20 74 68 65 79 20 64 6f 6e 27 74 20 63 61  so they don't ca
0a70: 73 63 61 64 65 20 64 6f 77 6e 20 77 68 65 6e 20  scade down when 
0a80: 74 68 65 79 20 73 68 6f 75 6c 64 6e 27 74 2e 20  they shouldn't. 
0a90: 47 6f 74 20 72 69 64 20 6f 66 20 74 68 65 20 75  Got rid of the u
0aa0: 6e 6e 65 63 65 73 73 61 72 79 20 73 74 61 63 6b  nnecessary stack
0ab0: 2e 0d 0a 23 20 56 65 72 73 69 6f 6e 20 20 20 20  ...# Version    
0ac0: 34 2e 32 20 54 69 67 68 74 65 6e 65 64 20 78 6d  4.2 Tightened xm
0ad0: 6c 3a 20 6f 6e 6c 79 20 63 6d 64 6c 65 74 2c 20  l: only cmdlet, 
0ae0: 66 75 6e 63 74 69 6f 6e 2c 20 61 6e 64 20 65 78  function, and ex
0af0: 74 65 72 6e 61 6c 20 73 63 72 69 70 74 73 2c 20  ternal scripts, 
0b00: 77 69 74 68 20 22 2d 22 20 69 6e 20 74 68 65 69  with "-" in thei
0b10: 72 20 6e 61 6d 65 73 20 61 72 65 20 65 78 65 6d  r names are exem
0b20: 70 74 65 64 20 66 72 6f 6d 20 62 65 69 6e 67 20  pted from being 
0b30: 63 6f 6e 76 65 72 74 65 64 20 69 6e 74 6f 20 78  converted into x
0b40: 6d 6c 20 74 61 67 73 2e 0d 0a 23 20 20 20 20 20  ml tags...#     
0b50: 20 20 20 20 20 20 20 20 20 20 20 46 69 78 65 64             Fixed
0b60: 20 73 6f 6d 65 20 61 6c 69 61 73 20 65 72 72 6f   some alias erro
0b70: 72 20 6d 65 73 73 61 67 65 73 20 63 61 75 73 65  r messages cause
0b80: 64 20 77 68 65 6e 20 50 53 43 58 20 69 73 20 61  d when PSCX is a
0b90: 6c 72 65 61 64 79 20 6c 6f 61 64 65 64 20 28 77  lready loaded (w
0ba0: 65 20 6f 76 65 72 77 72 69 74 65 20 74 68 65 69  e overwrite thei
0bb0: 72 20 61 6c 69 61 73 65 73 20 66 6f 72 20 63 76  r aliases for cv
0bc0: 78 6d 6c 20 61 6e 64 20 66 78 6d 6c 29 0d 0a 23  xml and fxml)..#
0bd0: 20 56 65 72 73 69 6f 6e 20 20 20 20 34 2e 33 20   Version    4.3 
0be0: 41 64 64 65 64 20 61 20 50 61 74 68 20 70 61 72  Added a Path par
0bf0: 61 6d 65 74 65 72 20 73 65 74 20 74 6f 20 46 6f  ameter set to Fo
0c00: 72 6d 61 74 2d 58 6d 6c 20 73 6f 20 79 6f 75 20  rmat-Xml so you 
0c10: 63 61 6e 20 73 70 65 63 69 66 79 20 78 6d 6c 20  can specify xml 
0c20: 66 69 6c 65 73 20 66 6f 72 20 70 72 65 74 79 20  files for prety 
0c30: 70 72 69 6e 74 69 6e 67 0d 0a 23 20 56 65 72 73  printing..# Vers
0c40: 69 6f 6e 20 20 20 20 34 2e 35 20 46 69 78 65 64  ion    4.5 Fixed
0c50: 20 70 6f 73 73 69 62 6c 65 20 5b 41 72 72 61 79   possible [Array
0c60: 5d 3a 3a 52 65 76 65 72 73 65 20 63 61 6c 6c 20  ]::Reverse call 
0c70: 6f 6e 20 61 20 6e 6f 6e 2d 61 72 72 61 79 20 69  on a non-array i
0c80: 6e 20 4e 65 77 2d 58 45 6c 65 6d 65 6e 74 20 28  n New-XElement (
0c90: 75 73 65 64 20 62 79 20 4e 65 77 2d 58 44 6f 63  used by New-XDoc
0ca0: 75 6d 65 6e 74 29 0d 0a 23 20 20 20 20 20 20 20  ument)..#       
0cb0: 20 20 20 20 20 20 20 20 20 57 6f 72 6b 20 61 72           Work ar
0cc0: 6f 75 6e 64 20 70 6f 73 73 69 62 6c 65 20 76 61  ound possible va
0cd0: 72 69 61 62 6c 65 20 73 6c 69 70 70 69 6e 67 20  riable slipping 
0ce0: 6f 6e 20 6e 75 6c 6c 20 76 61 6c 75 65 73 20 62  on null values b
0cf0: 79 3a 0d 0a 23 20 20 20 20 20 20 20 20 20 20 20  y:..#           
0d00: 20 20 20 20 20 31 29 20 61 6c 6c 6f 77 69 6e 67       1) allowing
0d10: 20 2d 70 61 72 61 6d 3a 24 76 61 6c 75 65 20 73   -param:$value s
0d20: 79 6e 74 61 78 20 28 77 68 69 63 68 20 64 6f 65  yntax (which doe
0d30: 73 6e 27 74 20 66 61 69 6c 20 77 68 65 6e 20 24  sn't fail when $
0d40: 76 61 6c 75 65 20 69 73 20 6e 75 6c 6c 29 0d 0a  value is null)..
0d50: 23 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  #               
0d60: 20 32 29 20 74 65 73 74 69 6e 67 20 66 6f 72 20   2) testing for 
0d70: 2d 6e 61 6d 65 20 73 79 6e 74 61 78 20 6f 6e 20  -name syntax on 
0d80: 74 68 65 20 76 61 6c 75 65 20 61 6e 64 20 75 73  the value and us
0d90: 69 6e 67 20 69 74 20 61 73 20 61 6e 20 61 74 74  ing it as an att
0da0: 72 69 62 75 74 65 20 69 6e 73 74 65 61 64 0d 0a  ribute instead..
0db0: 23 20 56 65 72 73 69 6f 6e 20 20 20 20 34 2e 36  # Version    4.6
0dc0: 20 41 64 64 65 64 20 2d 41 72 67 75 6d 65 6e 74   Added -Argument
0dd0: 73 20 74 6f 20 43 6f 6e 76 65 72 74 2d 58 6d 6c  s to Convert-Xml
0de0: 20 73 6f 20 74 68 61 74 20 79 6f 75 20 63 61 6e   so that you can
0df0: 20 70 61 73 73 20 61 72 67 75 6d 65 6e 74 73 20   pass arguments 
0e00: 74 6f 20 58 53 4c 54 20 74 72 61 6e 73 66 6f 72  to XSLT transfor
0e10: 6d 73 21 0d 0a 23 20 20 20 20 20 20 20 20 20 20  ms!..#          
0e20: 20 20 20 20 20 20 4e 6f 74 65 3a 20 77 68 65 6e        Note: when
0e30: 20 75 73 69 6e 67 20 73 74 72 69 6e 67 73 20 66   using strings f
0e40: 6f 72 20 78 73 6c 74 2c 20 6d 61 6b 65 20 73 75  or xslt, make su
0e50: 72 65 20 79 6f 75 20 73 69 6e 67 6c 65 20 71 75  re you single qu
0e60: 6f 74 65 20 74 68 65 6d 20 6f 72 20 65 73 63 61  ote them or esca
0e70: 70 65 20 74 68 65 20 24 20 73 69 67 6e 73 2e 0d  pe the $ signs..
0e80: 0a 23 20 56 65 72 73 69 6f 6e 20 20 20 20 34 2e  .# Version    4.
0e90: 37 20 46 69 78 65 64 20 61 20 74 79 70 6f 20 69  7 Fixed a typo i
0ea0: 6e 20 74 68 65 20 6e 61 6d 65 73 70 61 63 65 20  n the namespace 
0eb0: 70 61 72 61 6d 65 74 65 72 20 6f 66 20 53 65 6c  parameter of Sel
0ec0: 65 63 74 2d 58 6d 6c 0d 0a 23 20 56 65 72 73 69  ect-Xml..# Versi
0ed0: 6f 6e 20 20 20 20 34 2e 38 20 46 69 78 65 64 20  on    4.8 Fixed 
0ee0: 75 70 20 73 6f 6d 65 20 75 73 65 73 20 6f 66 20  up some uses of 
0ef0: 53 65 6c 65 63 74 2d 58 6d 6c 20 2d 52 65 6d 6f  Select-Xml -Remo
0f00: 76 65 4e 61 6d 65 73 70 61 63 65 0d 0a 23 20 56  veNamespace..# V
0f10: 65 72 73 69 6f 6e 20 20 20 20 35 2e 30 20 41 64  ersion    5.0 Ad
0f20: 64 65 64 20 55 70 64 61 74 65 2d 58 6d 6c 20 74  ded Update-Xml t
0f30: 6f 20 61 6c 6c 6f 77 20 73 65 74 74 69 6e 67 20  o allow setting 
0f40: 78 6d 6c 20 61 74 74 72 69 62 75 74 65 73 20 6f  xml attributes o
0f50: 72 20 6e 6f 64 65 20 63 6f 6e 74 65 6e 74 0d 0a  r node content..
0f60: 23 20 56 65 72 73 69 6f 6e 20 20 20 20 36 2e 30  # Version    6.0
0f70: 20 4d 61 6a 6f 72 20 63 6c 65 61 6e 75 70 2c 20   Major cleanup, 
0f80: 62 72 65 61 6b 69 6e 67 20 63 68 61 6e 67 65 73  breaking changes
0f90: 2e 0d 0a 23 20 20 20 20 20 20 20 2d 20 41 64 64  ...#       - Add
0fa0: 65 64 20 47 65 74 2d 58 6d 6c 43 6f 6e 74 65 6e  ed Get-XmlConten
0fb0: 74 20 61 6e 64 20 53 65 74 2d 58 6d 6c 43 6f 6e  t and Set-XmlCon
0fc0: 74 65 6e 74 20 66 6f 72 20 6c 6f 61 64 69 6e 67  tent for loading
0fd0: 2f 73 61 76 69 6e 67 20 58 4d 4c 20 66 72 6f 6d  /saving XML from
0fe0: 20 66 69 6c 65 73 20 6f 72 20 73 74 72 69 6e 67   files or string
0ff0: 73 0d 0a 23 20 20 20 20 20 20 20 2d 20 52 65 6d  s..#       - Rem
1000: 6f 76 65 64 20 50 61 74 68 20 61 6e 64 20 43 6f  oved Path and Co
1010: 6e 74 65 6e 74 20 70 61 72 61 6d 65 74 65 72 73  ntent parameters
1020: 20 66 72 6f 6d 20 74 68 65 20 6f 74 68 65 72 20   from the other 
1030: 66 75 6e 63 74 69 6f 6e 73 20 28 69 74 20 67 72  functions (it gr
1040: 65 61 74 6c 79 20 73 69 6d 70 6c 69 66 69 65 73  eatly simplifies
1050: 20 74 68 6f 73 74 20 66 75 6e 63 74 69 6f 6e 73   thost functions
1060: 2c 20 61 6e 64 20 6d 61 6b 65 73 20 74 68 65 20  , and makes the 
1070: 77 68 6f 6c 65 20 74 68 69 6e 67 20 6d 6f 72 65  whole thing more
1080: 20 6d 61 69 6e 74 61 69 6e 61 62 6c 65 29 0d 0a   maintainable)..
1090: 23 20 20 20 20 20 20 20 2d 20 55 70 64 61 74 65  #       - Update
10a0: 64 20 55 70 64 61 74 65 2d 58 6d 6c 20 74 6f 20  d Update-Xml to 
10b0: 73 75 70 70 6f 72 74 20 61 64 64 69 6e 67 20 6e  support adding n
10c0: 6f 64 65 73 20 22 62 65 66 6f 72 65 22 20 61 6e  odes "before" an
10d0: 64 20 22 61 66 74 65 72 22 20 6f 74 68 65 72 20  d "after" other 
10e0: 6e 6f 64 65 73 2c 20 61 6e 64 20 74 6f 20 73 75  nodes, and to su
10f0: 70 70 6f 72 74 20 22 72 65 6d 6f 76 65 22 69 6e  pport "remove"in
1100: 67 20 6e 6f 64 65 73 0d 0a 26 7b 20 0d 0a 24 6c  g nodes..&{ ..$l
1110: 6f 63 61 6c 3a 78 6c 72 38 72 20 3d 20 5b 70 73  ocal:xlr8r = [ps
1120: 6f 62 6a 65 63 74 5d 2e 61 73 73 65 6d 62 6c 79  object].assembly
1130: 2e 67 65 74 74 79 70 65 28 22 53 79 73 74 65 6d  .gettype("System
1140: 2e 4d 61 6e 61 67 65 6d 65 6e 74 2e 41 75 74 6f  .Management.Auto
1150: 6d 61 74 69 6f 6e 2e 54 79 70 65 41 63 63 65 6c  mation.TypeAccel
1160: 65 72 61 74 6f 72 73 22 29 0d 0a 24 6c 6f 63 61  erators")..$loca
1170: 6c 3a 78 6c 69 6e 71 20 3d 20 5b 52 65 66 6c 65  l:xlinq = [Refle
1180: 63 74 69 6f 6e 2e 41 73 73 65 6d 62 6c 79 5d 3a  ction.Assembly]:
1190: 3a 4c 6f 61 64 28 22 53 79 73 74 65 6d 2e 58 6d  :Load("System.Xm
11a0: 6c 2e 4c 69 6e 71 2c 20 56 65 72 73 69 6f 6e 3d  l.Linq, Version=
11b0: 33 2e 35 2e 30 2e 30 2c 20 43 75 6c 74 75 72 65  3.5.0.0, Culture
11c0: 3d 6e 65 75 74 72 61 6c 2c 20 50 75 62 6c 69 63  =neutral, Public
11d0: 4b 65 79 54 6f 6b 65 6e 3d 62 37 37 61 35 63 35  KeyToken=b77a5c5
11e0: 36 31 39 33 34 65 30 38 39 22 29 0d 0a 24 78 6c  61934e089")..$xl
11f0: 69 6e 71 2e 47 65 74 54 79 70 65 73 28 29 20 7c  inq.GetTypes() |
1200: 20 3f 20 7b 20 24 5f 2e 49 73 50 75 62 6c 69 63   ? { $_.IsPublic
1210: 20 2d 61 6e 64 20 21 24 5f 2e 49 73 53 65 72 69   -and !$_.IsSeri
1220: 61 6c 69 7a 61 62 6c 65 20 2d 61 6e 64 20 24 5f  alizable -and $_
1230: 2e 4e 61 6d 65 20 2d 6e 65 20 22 45 78 74 65 6e  .Name -ne "Exten
1240: 73 69 6f 6e 73 22 20 2d 61 6e 64 20 21 24 78 6c  sions" -and !$xl
1250: 72 38 72 3a 3a 47 65 74 5b 24 5f 2e 4e 61 6d 65  r8r::Get[$_.Name
1260: 5d 20 7d 20 7c 20 25 20 7b 0d 0a 20 20 24 78 6c  ] } | % {..  $xl
1270: 72 38 72 3a 3a 41 64 64 28 20 24 5f 2e 4e 61 6d  r8r::Add( $_.Nam
1280: 65 2c 20 24 5f 2e 46 75 6c 6c 4e 61 6d 65 20 29  e, $_.FullName )
1290: 0d 0a 7d 0d 0a 0d 0a 69 66 28 21 24 78 6c 72 38  ..}....if(!$xlr8
12a0: 72 3a 3a 47 65 74 5b 22 44 69 63 74 69 6f 6e 61  r::Get["Dictiona
12b0: 72 79 22 5d 29 20 7b 0d 0a 20 20 20 24 78 6c 72  ry"]) {..   $xlr
12c0: 38 72 3a 3a 41 64 64 28 20 22 44 69 63 74 69 6f  8r::Add( "Dictio
12d0: 6e 61 72 79 22 2c 20 22 53 79 73 74 65 6d 2e 43  nary", "System.C
12e0: 6f 6c 6c 65 63 74 69 6f 6e 73 2e 47 65 6e 65 72  ollections.Gener
12f0: 69 63 2e 44 69 63 74 69 6f 6e 61 72 79 60 60 32  ic.Dictionary``2
1300: 2c 20 6d 73 63 6f 72 6c 69 62 2c 20 56 65 72 73  , mscorlib, Vers
1310: 69 6f 6e 3d 32 2e 30 2e 30 2e 30 2c 20 43 75 6c  ion=2.0.0.0, Cul
1320: 74 75 72 65 3d 6e 65 75 74 72 61 6c 2c 20 50 75  ture=neutral, Pu
1330: 62 6c 69 63 4b 65 79 54 6f 6b 65 6e 3d 62 37 37  blicKeyToken=b77
1340: 61 35 63 35 36 31 39 33 34 65 30 38 39 22 20 29  a5c561934e089" )
1350: 0d 0a 7d 0d 0a 69 66 28 21 24 78 6c 72 38 72 3a  ..}..if(!$xlr8r:
1360: 3a 47 65 74 5b 22 50 53 50 61 72 73 65 72 22 5d  :Get["PSParser"]
1370: 29 20 7b 0d 0a 20 20 20 24 78 6c 72 38 72 3a 3a  ) {..   $xlr8r::
1380: 41 64 64 28 20 22 50 53 50 61 72 73 65 72 22 2c  Add( "PSParser",
1390: 20 22 53 79 73 74 65 6d 2e 4d 61 6e 61 67 65 6d   "System.Managem
13a0: 65 6e 74 2e 41 75 74 6f 6d 61 74 69 6f 6e 2e 50  ent.Automation.P
13b0: 53 50 61 72 73 65 72 2c 20 53 79 73 74 65 6d 2e  SParser, System.
13c0: 4d 61 6e 61 67 65 6d 65 6e 74 2e 41 75 74 6f 6d  Management.Autom
13d0: 61 74 69 6f 6e 2c 20 56 65 72 73 69 6f 6e 3d 31  ation, Version=1
13e0: 2e 30 2e 30 2e 30 2c 20 43 75 6c 74 75 72 65 3d  .0.0.0, Culture=
13f0: 6e 65 75 74 72 61 6c 2c 20 50 75 62 6c 69 63 4b  neutral, PublicK
1400: 65 79 54 6f 6b 65 6e 3d 33 31 62 66 33 38 35 36  eyToken=31bf3856
1410: 61 64 33 36 34 65 33 35 22 20 29 0d 0a 7d 0d 0a  ad364e35" )..}..
1420: 7d 0d 0a 0d 0a 0d 0a 66 75 6e 63 74 69 6f 6e 20  }......function 
1430: 49 6d 70 6f 72 74 2d 58 6d 6c 20 7b 0d 0a 23 2e  Import-Xml {..#.
1440: 53 79 6e 6f 70 73 69 73 0d 0a 23 20 20 20 4c 6f  Synopsis..#   Lo
1450: 61 64 20 61 6e 20 58 4d 4c 20 66 69 6c 65 20 61  ad an XML file a
1460: 73 20 61 6e 20 58 6d 6c 44 6f 63 75 6d 65 6e 74  s an XmlDocument
1470: 0d 0a 70 61 72 61 6d 28 0d 0a 20 20 20 20 23 20  ..param(..    # 
1480: 53 70 65 63 69 66 69 65 73 20 61 20 73 74 72 69  Specifies a stri
1490: 6e 67 20 74 68 61 74 20 63 6f 6e 74 61 69 6e 73  ng that contains
14a0: 20 74 68 65 20 58 4d 4c 20 74 6f 20 6c 6f 61 64   the XML to load
14b0: 2c 20 6f 72 20 61 20 70 61 74 68 20 74 6f 20 61  , or a path to a
14c0: 20 66 69 6c 65 20 77 68 69 63 68 20 68 61 73 20   file which has 
14d0: 74 68 65 20 58 4d 4c 20 74 6f 20 6c 6f 61 64 20  the XML to load 
14e0: 28 77 69 6c 64 63 61 72 64 73 20 61 72 65 20 70  (wildcards are p
14f0: 65 72 6d 69 74 74 65 64 29 2e 0d 0a 20 20 20 20  ermitted)...    
1500: 5b 50 61 72 61 6d 65 74 65 72 28 50 6f 73 69 74  [Parameter(Posit
1510: 69 6f 6e 3d 31 2c 4d 61 6e 64 61 74 6f 72 79 3d  ion=1,Mandatory=
1520: 24 74 72 75 65 2c 56 61 6c 75 65 46 72 6f 6d 50  $true,ValueFromP
1530: 69 70 65 6c 69 6e 65 3d 24 74 72 75 65 2c 56 61  ipeline=$true,Va
1540: 6c 75 65 46 72 6f 6d 50 69 70 65 6c 69 6e 65 42  lueFromPipelineB
1550: 79 50 72 6f 70 65 72 74 79 4e 61 6d 65 3d 24 74  yPropertyName=$t
1560: 72 75 65 29 5d 0d 0a 20 20 20 20 5b 56 61 6c 69  rue)]..    [Vali
1570: 64 61 74 65 4e 6f 74 4e 75 6c 6c 4f 72 45 6d 70  dateNotNullOrEmp
1580: 74 79 28 29 5d 0d 0a 20 20 20 20 5b 41 6c 69 61  ty()]..    [Alia
1590: 73 28 22 50 53 50 61 74 68 22 2c 22 50 61 74 68  s("PSPath","Path
15a0: 22 29 5d 0d 0a 20 20 20 20 5b 53 74 72 69 6e 67  ")]..    [String
15b0: 5b 5d 5d 24 43 6f 6e 74 65 6e 74 0d 0a 2c 0d 0a  []]$Content..,..
15c0: 20 20 20 20 23 20 49 66 20 73 65 74 2c 20 6c 6f      # If set, lo
15d0: 61 64 73 20 58 4d 4c 20 77 69 74 68 20 61 6c 6c  ads XML with all
15e0: 20 6e 61 6d 65 73 70 61 63 65 20 71 75 61 6c 69   namespace quali
15f0: 66 69 65 72 73 20 72 65 6d 6f 76 65 64 2c 20 61  fiers removed, a
1600: 6e 64 20 61 6c 6c 20 65 6e 74 69 74 69 65 73 20  nd all entities 
1610: 65 78 70 61 6e 64 65 64 2e 0d 0a 20 20 20 20 5b  expanded...    [
1620: 41 6c 69 61 73 28 22 52 6e 22 2c 22 52 6d 22 29  Alias("Rn","Rm")
1630: 5d 0d 0a 20 20 20 20 5b 53 77 69 74 63 68 5d 24  ]..    [Switch]$
1640: 52 65 6d 6f 76 65 4e 61 6d 65 73 70 61 63 65 0d  RemoveNamespace.
1650: 0a 29 0d 0a 62 65 67 69 6e 20 7b 0d 0a 20 20 20  .)..begin {..   
1660: 20 5b 54 65 78 74 2e 53 74 72 69 6e 67 42 75 69   [Text.StringBui
1670: 6c 64 65 72 5d 24 58 6d 6c 43 6f 6e 74 65 6e 74  lder]$XmlContent
1680: 20 3d 20 5b 53 74 72 69 6e 67 5d 3a 3a 45 6d 70   = [String]::Emp
1690: 74 79 0d 0a 20 20 20 20 5b 62 6f 6f 6c 5d 24 50  ty..    [bool]$P
16a0: 61 74 68 20 3d 20 24 74 72 75 65 0d 0a 7d 0d 0a  ath = $true..}..
16b0: 70 72 6f 63 65 73 73 20 7b 0d 0a 20 20 20 20 69  process {..    i
16c0: 66 28 24 50 61 74 68 20 2d 61 6e 64 20 28 24 50  f($Path -and ($P
16d0: 61 74 68 20 3d 20 54 65 73 74 2d 50 61 74 68 20  ath = Test-Path 
16e0: 40 28 24 43 6f 6e 74 65 6e 74 29 5b 30 5d 20 2d  @($Content)[0] -
16f0: 45 41 20 30 29 29 20 7b 20 0d 0a 20 20 20 20 20  EA 0)) { ..     
1700: 20 20 20 66 6f 72 65 61 63 68 28 24 66 69 6c 65     foreach($file
1710: 20 69 6e 20 52 65 73 6f 6c 76 65 2d 50 61 74 68   in Resolve-Path
1720: 20 24 43 6f 6e 74 65 6e 74 29 20 7b 0d 0a 20 20   $Content) {..  
1730: 20 20 20 20 20 20 20 20 20 20 24 78 6d 6c 20 3d            $xml =
1740: 20 4e 65 77 2d 4f 62 6a 65 63 74 20 53 79 73 74   New-Object Syst
1750: 65 6d 2e 58 6d 6c 2e 58 6d 6c 44 6f 63 75 6d 65  em.Xml.XmlDocume
1760: 6e 74 3b 20 0d 0a 20 20 20 20 20 20 20 20 20 20  nt; ..          
1770: 20 20 69 66 28 24 66 69 6c 65 2e 50 72 6f 76 69    if($file.Provi
1780: 64 65 72 2e 4e 61 6d 65 20 2d 65 71 20 22 46 69  der.Name -eq "Fi
1790: 6c 65 53 79 73 74 65 6d 22 29 20 7b 0d 0a 20 20  leSystem") {..  
17a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 24 78                $x
17b0: 6d 6c 2e 4c 6f 61 64 28 20 24 66 69 6c 65 2e 50  ml.Load( $file.P
17c0: 72 6f 76 69 64 65 72 50 61 74 68 20 29 0d 0a 20  roviderPath ).. 
17d0: 20 20 20 20 20 20 20 20 20 20 20 7d 20 65 6c 73             } els
17e0: 65 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  e {..           
17f0: 20 20 20 20 20 24 6f 66 73 20 3d 20 22 60 6e 22       $ofs = "`n"
1800: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1810: 20 20 24 78 6d 6c 2e 4c 6f 61 64 58 6d 6c 28 20    $xml.LoadXml( 
1820: 28 5b 53 74 72 69 6e 67 5d 28 47 65 74 2d 43 6f  ([String](Get-Co
1830: 6e 74 65 6e 74 20 24 66 69 6c 65 29 29 20 29 0d  ntent $file)) ).
1840: 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  .            }..
1850: 20 20 20 20 20 20 20 20 20 20 20 20 69 66 28 24              if($
1860: 52 65 6d 6f 76 65 4e 61 6d 65 73 70 61 63 65 29  RemoveNamespace)
1870: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
1880: 20 20 20 20 5b 53 79 73 74 65 6d 2e 58 6d 6c 2e      [System.Xml.
1890: 58 6d 6c 4e 6f 64 65 5b 5d 5d 24 58 6d 6c 20 3d  XmlNode[]]$Xml =
18a0: 20 40 28 52 65 6d 6f 76 65 2d 58 6d 6c 4e 61 6d   @(Remove-XmlNam
18b0: 65 73 70 61 63 65 20 2d 58 6d 6c 20 24 6e 6f 64  espace -Xml $nod
18c0: 65 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e)..            
18d0: 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 57  }..            W
18e0: 72 69 74 65 2d 4f 75 74 70 75 74 20 24 78 6d 6c  rite-Output $xml
18f0: 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20  ..        }..   
1900: 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 20 20 20   } else {..     
1910: 20 20 20 23 20 49 66 20 74 68 65 20 22 70 61 74     # If the "pat
1920: 68 22 20 70 61 72 61 6d 65 74 65 72 20 69 73 6e  h" parameter isn
1930: 27 74 20 61 63 74 75 61 6c 6c 79 20 61 20 70 61  't actually a pa
1940: 74 68 2c 20 61 73 73 75 6d 65 20 74 68 61 74 20  th, assume that 
1950: 69 74 27 73 20 61 63 74 75 61 6c 6c 79 20 63 6f  it's actually co
1960: 6e 74 65 6e 74 0d 0a 20 20 20 20 20 20 20 20 66  ntent..        f
1970: 6f 72 65 61 63 68 28 24 6c 69 6e 65 20 69 6e 20  oreach($line in 
1980: 24 63 6f 6e 74 65 6e 74 29 20 7b 0d 0a 20 20 20  $content) {..   
1990: 20 20 20 20 20 20 20 20 20 24 6e 75 6c 6c 20 3d           $null =
19a0: 20 24 58 6d 6c 43 6f 6e 74 65 6e 74 2e 41 70 70   $XmlContent.App
19b0: 65 6e 64 4c 69 6e 65 28 20 24 6c 69 6e 65 20 29  endLine( $line )
19c0: 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20  ..        }..   
19d0: 20 7d 0d 0a 7d 0d 0a 65 6e 64 20 7b 0d 0a 20 20   }..}..end {..  
19e0: 20 20 69 66 28 21 24 50 61 74 68 29 20 7b 0d 0a    if(!$Path) {..
19f0: 20 20 20 20 20 20 20 20 24 78 6d 6c 20 3d 20 4e          $xml = N
1a00: 65 77 2d 4f 62 6a 65 63 74 20 53 79 73 74 65 6d  ew-Object System
1a10: 2e 58 6d 6c 2e 58 6d 6c 44 6f 63 75 6d 65 6e 74  .Xml.XmlDocument
1a20: 3b 20 0d 0a 20 20 20 20 20 20 20 20 24 78 6d 6c  ; ..        $xml
1a30: 2e 4c 6f 61 64 58 6d 6c 28 20 24 58 6d 6c 43 6f  .LoadXml( $XmlCo
1a40: 6e 74 65 6e 74 2e 54 6f 53 74 72 69 6e 67 28 29  ntent.ToString()
1a50: 20 29 0d 0a 20 20 20 20 20 20 20 20 69 66 28 24   )..        if($
1a60: 52 65 6d 6f 76 65 4e 61 6d 65 73 70 61 63 65 29  RemoveNamespace)
1a70: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
1a80: 24 58 6d 6c 20 3d 20 40 28 52 65 6d 6f 76 65 2d  $Xml = @(Remove-
1a90: 58 6d 6c 4e 61 6d 65 73 70 61 63 65 20 2d 58 6d  XmlNamespace -Xm
1aa0: 6c 20 24 78 6d 6c 29 0d 0a 20 20 20 20 20 20 20  l $xml)..       
1ab0: 20 7d 0d 0a 20 20 20 20 20 20 20 20 57 72 69 74   }..        Writ
1ac0: 65 2d 4f 75 74 70 75 74 20 24 78 6d 6c 0d 0a 20  e-Output $xml.. 
1ad0: 20 20 20 7d 0d 0a 7d 7d 0d 0a 53 65 74 2d 41 6c     }..}}..Set-Al
1ae0: 69 61 73 20 69 70 78 6d 6c 20 49 6d 70 6f 72 74  ias ipxml Import
1af0: 2d 58 6d 6c 0d 0a 53 65 74 2d 41 6c 69 61 73 20  -Xml..Set-Alias 
1b00: 69 70 78 20 49 6d 70 6f 72 74 2d 58 6d 6c 0d 0a  ipx Import-Xml..
1b10: 53 65 74 2d 41 6c 69 61 73 20 47 65 74 2d 58 6d  Set-Alias Get-Xm
1b20: 6c 20 49 6d 70 6f 72 74 2d 58 6d 6c 0d 0a 53 65  l Import-Xml..Se
1b30: 74 2d 41 6c 69 61 73 20 67 78 6d 6c 20 49 6d 70  t-Alias gxml Imp
1b40: 6f 72 74 2d 58 6d 6c 0d 0a 53 65 74 2d 41 6c 69  ort-Xml..Set-Ali
1b50: 61 73 20 67 78 20 49 6d 70 6f 72 74 2d 58 6d 6c  as gx Import-Xml
1b60: 0d 0a 0d 0a 66 75 6e 63 74 69 6f 6e 20 45 78 70  ....function Exp
1b70: 6f 72 74 2d 58 6d 6c 20 7b 0d 0a 70 61 72 61 6d  ort-Xml {..param
1b80: 28 0d 0a 20 20 20 20 5b 50 61 72 61 6d 65 74 65  (..    [Paramete
1b90: 72 28 4d 61 6e 64 61 74 6f 72 79 3d 24 74 72 75  r(Mandatory=$tru
1ba0: 65 2c 20 50 6f 73 69 74 69 6f 6e 3d 31 29 5d 0d  e, Position=1)].
1bb0: 0a 20 20 20 20 5b 41 6c 69 61 73 28 22 50 53 50  .    [Alias("PSP
1bc0: 61 74 68 22 29 5d 0d 0a 20 20 20 20 5b 53 74 72  ath")]..    [Str
1bd0: 69 6e 67 5d 24 50 61 74 68 0d 0a 2c 0d 0a 20 20  ing]$Path..,..  
1be0: 20 20 23 20 53 70 65 63 69 66 69 65 73 20 6f 6e    # Specifies on
1bf0: 65 20 6f 72 20 6d 6f 72 65 20 58 4d 4c 20 6e 6f  e or more XML no
1c00: 64 65 73 20 74 6f 20 73 65 61 72 63 68 2e 0d 0a  des to search...
1c10: 20 20 20 20 5b 50 61 72 61 6d 65 74 65 72 28 50      [Parameter(P
1c20: 6f 73 69 74 69 6f 6e 3d 35 2c 50 61 72 61 6d 65  osition=5,Parame
1c30: 74 65 72 53 65 74 4e 61 6d 65 3d 22 58 6d 6c 22  terSetName="Xml"
1c40: 2c 4d 61 6e 64 61 74 6f 72 79 3d 24 74 72 75 65  ,Mandatory=$true
1c50: 2c 56 61 6c 75 65 46 72 6f 6d 50 69 70 65 6c 69  ,ValueFromPipeli
1c60: 6e 65 3d 24 74 72 75 65 2c 56 61 6c 75 65 46 72  ne=$true,ValueFr
1c70: 6f 6d 50 69 70 65 6c 69 6e 65 42 79 50 72 6f 70  omPipelineByProp
1c80: 65 72 74 79 4e 61 6d 65 3d 24 74 72 75 65 29 5d  ertyName=$true)]
1c90: 0d 0a 20 20 20 20 5b 56 61 6c 69 64 61 74 65 4e  ..    [ValidateN
1ca0: 6f 74 4e 75 6c 6c 4f 72 45 6d 70 74 79 28 29 5d  otNullOrEmpty()]
1cb0: 0d 0a 20 20 20 20 5b 41 6c 69 61 73 28 22 4e 6f  ..    [Alias("No
1cc0: 64 65 22 29 5d 0d 0a 20 20 20 20 5b 58 6d 6c 5d  de")]..    [Xml]
1cd0: 24 58 6d 6c 0d 0a 29 0d 0a 70 72 6f 63 65 73 73  $Xml..)..process
1ce0: 20 7b 0d 0a 20 20 20 20 24 78 6d 6c 2e 53 61 76   {..    $xml.Sav
1cf0: 65 28 20 24 50 61 74 68 20 29 0d 0a 7d 0d 0a 7d  e( $Path )..}..}
1d00: 0d 0a 53 65 74 2d 41 6c 69 61 73 20 65 70 78 6d  ..Set-Alias epxm
1d10: 6c 20 45 78 70 6f 72 74 2d 58 6d 6c 0d 0a 53 65  l Export-Xml..Se
1d20: 74 2d 41 6c 69 61 73 20 65 70 78 20 45 78 70 6f  t-Alias epx Expo
1d30: 72 74 2d 58 6d 6c 0d 0a 53 65 74 2d 41 6c 69 61  rt-Xml..Set-Alia
1d40: 73 20 53 65 74 2d 58 6d 6c 20 45 78 70 6f 72 74  s Set-Xml Export
1d50: 2d 58 6d 6c 0d 0a 53 65 74 2d 41 6c 69 61 73 20  -Xml..Set-Alias 
1d60: 73 78 6d 6c 20 45 78 70 6f 72 74 2d 58 6d 6c 0d  sxml Export-Xml.
1d70: 0a 53 65 74 2d 41 6c 69 61 73 20 73 78 20 45 78  .Set-Alias sx Ex
1d80: 70 6f 72 74 2d 58 6d 6c 0d 0a 0d 0a 66 75 6e 63  port-Xml....func
1d90: 74 69 6f 6e 20 46 6f 72 6d 61 74 2d 58 6d 6c 20  tion Format-Xml 
1da0: 7b 0d 0a 23 2e 53 79 6e 6f 70 73 69 73 0d 0a 23  {..#.Synopsis..#
1db0: 20 20 20 50 72 65 74 74 79 2d 70 72 69 6e 74 20     Pretty-print 
1dc0: 66 6f 72 6d 61 74 74 65 64 20 58 4d 4c 20 73 6f  formatted XML so
1dd0: 75 72 63 65 0d 0a 23 2e 44 65 73 63 72 69 70 74  urce..#.Descript
1de0: 69 6f 6e 0d 0a 23 20 20 20 52 75 6e 73 20 61 6e  ion..#   Runs an
1df0: 20 58 6d 6c 44 6f 63 75 6d 65 6e 74 20 74 68 72   XmlDocument thr
1e00: 6f 75 67 68 20 61 6e 20 61 75 74 6f 2d 69 6e 64  ough an auto-ind
1e10: 65 6e 74 69 6e 67 20 58 6d 6c 57 72 69 74 65 72  enting XmlWriter
1e20: 0d 0a 23 2e 50 61 72 61 6d 65 74 65 72 20 58 6d  ..#.Parameter Xm
1e30: 6c 0d 0a 23 20 20 20 54 68 65 20 58 6d 6c 20 44  l..#   The Xml D
1e40: 6f 63 75 6d 65 6e 74 0d 0a 23 2e 50 61 72 61 6d  ocument..#.Param
1e50: 65 74 65 72 20 50 61 74 68 0d 0a 23 20 20 20 54  eter Path..#   T
1e60: 68 65 20 70 61 74 68 20 74 6f 20 61 6e 20 78 6d  he path to an xm
1e70: 6c 20 64 6f 63 75 6d 65 6e 74 20 28 6f 6e 20 64  l document (on d
1e80: 69 73 63 20 6f 72 20 61 6e 79 20 6f 74 68 65 72  isc or any other
1e90: 20 63 6f 6e 74 65 6e 74 20 70 72 6f 76 69 64 65   content provide
1ea0: 72 29 2e 0d 0a 23 2e 50 61 72 61 6d 65 74 65 72  r)...#.Parameter
1eb0: 20 49 6e 64 65 6e 74 0d 0a 23 20 20 20 54 68 65   Indent..#   The
1ec0: 20 69 6e 64 65 6e 74 20 6c 65 76 65 6c 20 28 64   indent level (d
1ed0: 65 66 61 75 6c 74 73 20 74 6f 20 32 20 73 70 61  efaults to 2 spa
1ee0: 63 65 73 29 0d 0a 23 2e 45 78 61 6d 70 6c 65 0d  ces)..#.Example.
1ef0: 0a 23 20 20 20 5b 78 6d 6c 5d 24 78 6d 6c 20 3d  .#   [xml]$xml =
1f00: 20 67 65 74 2d 63 6f 6e 74 65 6e 74 20 44 61 74   get-content Dat
1f10: 61 2e 78 6d 6c 0d 0a 23 20 20 20 43 3a 5c 50 53  a.xml..#   C:\PS
1f20: 3e 46 6f 72 6d 61 74 2d 58 6d 6c 20 24 78 6d 6c  >Format-Xml $xml
1f30: 0d 0a 23 2e 45 78 61 6d 70 6c 65 0d 0a 23 20 20  ..#.Example..#  
1f40: 20 67 65 74 2d 63 6f 6e 74 65 6e 74 20 44 61 74   get-content Dat
1f50: 61 2e 78 6d 6c 20 7c 20 46 6f 72 6d 61 74 2d 58  a.xml | Format-X
1f60: 6d 6c 0d 0a 23 2e 45 78 61 6d 70 6c 65 0d 0a 23  ml..#.Example..#
1f70: 20 20 20 46 6f 72 6d 61 74 2d 58 6d 6c 20 43 3a     Format-Xml C:
1f80: 5c 50 53 5c 44 61 74 61 2e 78 6d 6c 0d 0a 23 2e  \PS\Data.xml..#.
1f90: 45 78 61 6d 70 6c 65 0d 0a 23 20 20 20 6c 73 20  Example..#   ls 
1fa0: 2a 2e 78 6d 6c 20 7c 20 46 6f 72 6d 61 74 2d 58  *.xml | Format-X
1fb0: 6d 6c 0d 0a 23 0d 0a 5b 43 6d 64 6c 65 74 42 69  ml..#..[CmdletBi
1fc0: 6e 64 69 6e 67 28 29 5d 0d 0a 70 61 72 61 6d 28  nding()]..param(
1fd0: 0d 0a 20 20 20 5b 50 61 72 61 6d 65 74 65 72 28  ..   [Parameter(
1fe0: 50 6f 73 69 74 69 6f 6e 3d 30 2c 20 4d 61 6e 64  Position=0, Mand
1ff0: 61 74 6f 72 79 3d 24 74 72 75 65 2c 20 56 61 6c  atory=$true, Val
2000: 75 65 46 72 6f 6d 50 69 70 65 6c 69 6e 65 3d 24  ueFromPipeline=$
2010: 74 72 75 65 2c 20 50 61 72 61 6d 65 74 65 72 53  true, ParameterS
2020: 65 74 4e 61 6d 65 3d 22 44 6f 63 75 6d 65 6e 74  etName="Document
2030: 22 29 5d 0d 0a 20 20 20 5b 78 6d 6c 5d 24 58 6d  ")]..   [xml]$Xm
2040: 6c 0d 0a 2c 0d 0a 20 20 20 5b 50 61 72 61 6d 65  l..,..   [Parame
2050: 74 65 72 28 50 6f 73 69 74 69 6f 6e 3d 30 2c 20  ter(Position=0, 
2060: 4d 61 6e 64 61 74 6f 72 79 3d 24 74 72 75 65 2c  Mandatory=$true,
2070: 20 56 61 6c 75 65 46 72 6f 6d 50 69 70 65 6c 69   ValueFromPipeli
2080: 6e 65 3d 24 74 72 75 65 2c 20 56 61 6c 75 65 46  ne=$true, ValueF
2090: 72 6f 6d 50 69 70 65 6c 69 6e 65 42 79 50 72 6f  romPipelineByPro
20a0: 70 65 72 74 79 4e 61 6d 65 3d 24 74 72 75 65 2c  pertyName=$true,
20b0: 20 50 61 72 61 6d 65 74 65 72 53 65 74 4e 61 6d   ParameterSetNam
20c0: 65 3d 22 46 69 6c 65 22 29 5d 0d 0a 20 20 20 5b  e="File")]..   [
20d0: 41 6c 69 61 73 28 22 50 73 50 61 74 68 22 29 5d  Alias("PsPath")]
20e0: 0d 0a 20 20 20 5b 73 74 72 69 6e 67 5d 24 50 61  ..   [string]$Pa
20f0: 74 68 0d 0a 2c 0d 0a 20 20 20 5b 50 61 72 61 6d  th..,..   [Param
2100: 65 74 65 72 28 4d 61 6e 64 61 74 6f 72 79 3d 24  eter(Mandatory=$
2110: 66 61 6c 73 65 29 5d 0d 0a 20 20 20 24 49 6e 64  false)]..   $Ind
2120: 65 6e 74 3d 32 0d 0a 29 0d 0a 70 72 6f 63 65 73  ent=2..)..proces
2130: 73 20 7b 0d 0a 20 20 20 23 23 20 4c 6f 61 64 20  s {..   ## Load 
2140: 66 72 6f 6d 20 66 69 6c 65 2c 20 69 66 20 6e 65  from file, if ne
2150: 63 65 73 73 61 72 79 0d 0a 20 20 20 69 66 28 24  cessary..   if($
2160: 50 61 74 68 29 20 7b 20 5b 78 6d 6c 5d 24 78 6d  Path) { [xml]$xm
2170: 6c 20 3d 20 47 65 74 2d 43 6f 6e 74 65 6e 74 20  l = Get-Content 
2180: 24 50 61 74 68 20 7d 0d 0a 20 20 20 0d 0a 20 20  $Path }..   ..  
2190: 20 24 53 74 72 69 6e 67 57 72 69 74 65 72 20 3d   $StringWriter =
21a0: 20 4e 65 77 2d 4f 62 6a 65 63 74 20 53 79 73 74   New-Object Syst
21b0: 65 6d 2e 49 4f 2e 53 74 72 69 6e 67 57 72 69 74  em.IO.StringWrit
21c0: 65 72 0d 0a 20 20 20 24 58 6d 6c 57 72 69 74 65  er..   $XmlWrite
21d0: 72 20 3d 20 4e 65 77 2d 4f 62 6a 65 63 74 20 53  r = New-Object S
21e0: 79 73 74 65 6d 2e 58 6d 6c 2e 58 6d 6c 54 65 78  ystem.Xml.XmlTex
21f0: 74 57 72 69 74 65 72 20 24 53 74 72 69 6e 67 57  tWriter $StringW
2200: 72 69 74 65 72 0d 0a 20 20 20 24 78 6d 6c 57 72  riter..   $xmlWr
2210: 69 74 65 72 2e 46 6f 72 6d 61 74 74 69 6e 67 20  iter.Formatting 
2220: 3d 20 22 69 6e 64 65 6e 74 65 64 22 0d 0a 20 20  = "indented"..  
2230: 20 24 78 6d 6c 57 72 69 74 65 72 2e 49 6e 64 65   $xmlWriter.Inde
2240: 6e 74 61 74 69 6f 6e 20 3d 20 24 49 6e 64 65 6e  ntation = $Inden
2250: 74 0d 0a 20 20 20 24 78 6d 6c 2e 57 72 69 74 65  t..   $xml.Write
2260: 43 6f 6e 74 65 6e 74 54 6f 28 24 58 6d 6c 57 72  ContentTo($XmlWr
2270: 69 74 65 72 29 0d 0a 20 20 20 24 58 6d 6c 57 72  iter)..   $XmlWr
2280: 69 74 65 72 2e 46 6c 75 73 68 28 29 0d 0a 20 20  iter.Flush()..  
2290: 20 24 53 74 72 69 6e 67 57 72 69 74 65 72 2e 46   $StringWriter.F
22a0: 6c 75 73 68 28 29 0d 0a 20 20 20 57 72 69 74 65  lush()..   Write
22b0: 2d 4f 75 74 70 75 74 20 24 53 74 72 69 6e 67 57  -Output $StringW
22c0: 72 69 74 65 72 2e 54 6f 53 74 72 69 6e 67 28 29  riter.ToString()
22d0: 0d 0a 7d 7d 0d 0a 53 65 74 2d 41 6c 69 61 73 20  ..}}..Set-Alias 
22e0: 66 78 6d 6c 20 46 6f 72 6d 61 74 2d 58 6d 6c 20  fxml Format-Xml 
22f0: 2d 45 41 20 30 0d 0a 53 65 74 2d 41 6c 69 61 73  -EA 0..Set-Alias
2300: 20 66 78 20 20 20 46 6f 72 6d 61 74 2d 58 6d 6c   fx   Format-Xml
2310: 20 2d 45 41 20 30 0d 0a 0d 0a 66 75 6e 63 74 69   -EA 0....functi
2320: 6f 6e 20 53 65 6c 65 63 74 2d 58 6d 6c 4e 6f 64  on Select-XmlNod
2330: 65 49 6e 74 65 72 6e 61 6c 20 7b 0d 0a 5b 43 6d  eInternal {..[Cm
2340: 64 6c 65 74 42 69 6e 64 69 6e 67 28 29 5d 0d 0a  dletBinding()]..
2350: 70 61 72 61 6d 28 5b 58 6d 6c 2e 58 6d 6c 4e 6f  param([Xml.XmlNo
2360: 64 65 5b 5d 5d 24 58 6d 6c 2c 20 5b 53 74 72 69  de[]]$Xml, [Stri
2370: 6e 67 5b 5d 5d 24 58 50 61 74 68 2c 20 5b 48 61  ng[]]$XPath, [Ha
2380: 73 68 74 61 62 6c 65 5d 24 4e 61 6d 65 73 70 61  shtable]$Namespa
2390: 63 65 4d 61 6e 61 67 65 72 29 0d 0a 62 65 67 69  ceManager)..begi
23a0: 6e 20 7b 0d 0a 20 20 20 20 57 72 69 74 65 2d 56  n {..    Write-V
23b0: 65 72 62 6f 73 65 20 22 58 50 61 74 68 20 3d 20  erbose "XPath = 
23c0: 24 28 24 58 50 61 74 68 20 2d 6a 6f 69 6e 20 27  $($XPath -join '
23d0: 2c 27 29 22 0d 0a 20 20 20 20 66 6f 72 65 61 63  ,')"..    foreac
23e0: 68 28 24 6e 6f 64 65 20 69 6e 20 24 78 6d 6c 29  h($node in $xml)
23f0: 20 7b 0d 0a 20 20 20 20 20 20 20 20 69 66 28 24   {..        if($
2400: 4e 61 6d 65 73 70 61 63 65 4d 61 6e 61 67 65 72  NamespaceManager
2410: 29 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ) {..           
2420: 20 24 6e 73 4d 61 6e 61 67 65 72 20 3d 20 6e 65   $nsManager = ne
2430: 77 2d 6f 62 6a 65 63 74 20 53 79 73 74 65 6d 2e  w-object System.
2440: 58 6d 6c 2e 58 6d 6c 4e 61 6d 65 73 70 61 63 65  Xml.XmlNamespace
2450: 4d 61 6e 61 67 65 72 20 24 6e 6f 64 65 2e 4e 61  Manager $node.Na
2460: 6d 65 54 61 62 6c 65 0d 0a 20 20 20 20 20 20 20  meTable..       
2470: 20 20 20 20 20 66 6f 72 65 61 63 68 28 24 6e 73       foreach($ns
2480: 20 69 6e 20 24 4e 61 6d 65 73 70 61 63 65 4d 61   in $NamespaceMa
2490: 6e 61 67 65 72 2e 47 65 74 45 6e 75 6d 65 72 61  nager.GetEnumera
24a0: 74 6f 72 28 29 29 20 7b 0d 0a 20 20 20 20 20 20  tor()) {..      
24b0: 20 20 20 20 20 20 20 20 20 20 24 6e 73 4d 61 6e            $nsMan
24c0: 61 67 65 72 2e 41 64 64 4e 61 6d 65 73 70 61 63  ager.AddNamespac
24d0: 65 28 20 24 6e 73 2e 4b 65 79 2c 20 24 6e 73 2e  e( $ns.Key, $ns.
24e0: 56 61 6c 75 65 20 29 0d 0a 20 20 20 20 20 20 20  Value )..       
24f0: 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..        
2500: 20 20 20 20 57 72 69 74 65 2d 56 65 72 62 6f 73      Write-Verbos
2510: 65 20 22 4e 61 6d 65 73 20 3d 20 24 28 24 6e 73  e "Names = $($ns
2520: 4d 61 6e 61 67 65 72 20 7c 20 25 20 7b 20 40 7b  Manager | % { @{
2530: 20 24 5f 20 3d 20 24 6e 73 4d 61 6e 61 67 65 72   $_ = $nsManager
2540: 2e 4c 6f 6f 6b 75 70 4e 61 6d 65 73 70 61 63 65  .LookupNamespace
2550: 28 24 5f 29 20 7d 20 7d 20 7c 20 4f 75 74 2d 53  ($_) } } | Out-S
2560: 74 72 69 6e 67 29 22 0d 0a 20 20 20 20 20 20 20  tring)"..       
2570: 20 7d 0d 0a 20 20 20 20 20 20 20 20 66 6f 72 65   }..        fore
2580: 61 63 68 28 24 70 61 74 68 20 69 6e 20 24 78 70  ach($path in $xp
2590: 61 74 68 29 20 7b 0d 0a 20 20 20 20 20 20 20 20  ath) {..        
25a0: 20 20 20 20 24 6e 6f 64 65 2e 53 65 6c 65 63 74      $node.Select
25b0: 4e 6f 64 65 73 28 24 70 61 74 68 2c 20 24 6e 73  Nodes($path, $ns
25c0: 4d 61 6e 61 67 65 72 29 0d 0a 20 20 20 20 20 20  Manager)..      
25d0: 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a 7d 7d 0d 0a    }..    }..}}..
25e0: 0d 0a 66 75 6e 63 74 69 6f 6e 20 53 65 6c 65 63  ..function Selec
25f0: 74 2d 58 6d 6c 20 7b 0d 0a 23 2e 53 79 6e 6f 70  t-Xml {..#.Synop
2600: 73 69 73 0d 0a 23 20 20 54 68 65 20 53 65 6c 65  sis..#  The Sele
2610: 63 74 2d 58 4d 4c 20 63 6d 64 6c 65 74 20 6c 65  ct-XML cmdlet le
2620: 74 73 20 79 6f 75 20 75 73 65 20 58 50 61 74 68  ts you use XPath
2630: 20 71 75 65 72 69 65 73 20 74 6f 20 73 65 61 72   queries to sear
2640: 63 68 20 66 6f 72 20 74 65 78 74 20 69 6e 20 58  ch for text in X
2650: 4d 4c 20 73 74 72 69 6e 67 73 20 61 6e 64 20 64  ML strings and d
2660: 6f 63 75 6d 65 6e 74 73 2e 20 45 6e 74 65 72 20  ocuments. Enter 
2670: 61 6e 20 58 50 61 74 68 20 71 75 65 72 79 2c 20  an XPath query, 
2680: 61 6e 64 20 75 73 65 20 74 68 65 20 43 6f 6e 74  and use the Cont
2690: 65 6e 74 2c 20 50 61 74 68 2c 20 6f 72 20 58 6d  ent, Path, or Xm
26a0: 6c 20 70 61 72 61 6d 65 74 65 72 20 74 6f 20 73  l parameter to s
26b0: 70 65 63 69 66 79 20 74 68 65 20 58 4d 4c 20 74  pecify the XML t
26c0: 6f 20 62 65 20 73 65 61 72 63 68 65 64 2e 0d 0a  o be searched...
26d0: 23 2e 44 65 73 63 72 69 70 74 69 6f 6e 0d 0a 23  #.Description..#
26e0: 20 20 49 6d 70 72 6f 76 65 73 20 6f 76 65 72 20    Improves over 
26f0: 74 68 65 20 62 75 69 6c 74 2d 69 6e 20 53 65 6c  the built-in Sel
2700: 65 63 74 2d 58 4d 4c 20 62 79 20 6c 65 76 65 72  ect-XML by lever
2710: 61 67 69 6e 67 20 52 65 6d 6f 76 65 2d 58 6d 6c  aging Remove-Xml
2720: 4e 61 6d 65 73 70 61 63 65 20 74 6f 20 70 72 6f  Namespace to pro
2730: 76 69 64 65 20 61 20 2d 52 65 6d 6f 76 65 4e 61  vide a -RemoveNa
2740: 6d 65 73 70 61 63 65 20 70 61 72 61 6d 65 74 65  mespace paramete
2750: 72 20 2d 2d 20 69 66 20 69 74 27 73 20 73 75 70  r -- if it's sup
2760: 70 6c 69 65 64 2c 20 61 6c 6c 20 6f 66 20 74 68  plied, all of th
2770: 65 20 6e 61 6d 65 73 70 61 63 65 20 64 65 63 6c  e namespace decl
2780: 61 72 61 74 69 6f 6e 73 20 61 6e 64 20 70 72 65  arations and pre
2790: 66 69 78 65 73 20 61 72 65 20 72 65 6d 6f 76 65  fixes are remove
27a0: 64 20 66 72 6f 6d 20 61 6c 6c 20 58 4d 4c 20 6e  d from all XML n
27b0: 6f 64 65 73 20 28 62 79 20 61 6e 20 58 53 4c 20  odes (by an XSL 
27c0: 74 72 61 6e 73 66 6f 72 6d 29 20 62 65 66 6f 72  transform) befor
27d0: 65 20 73 65 61 72 63 68 69 6e 67 2e 20 20 0d 0a  e searching.  ..
27e0: 23 20 20 0d 0a 23 20 20 48 6f 77 65 76 65 72 2c  #  ..#  However,
27f0: 20 6f 6e 6c 79 20 72 61 77 20 58 6d 6c 4e 6f 64   only raw XmlNod
2800: 65 73 20 61 72 65 20 72 65 74 75 72 6e 65 64 20  es are returned 
2810: 66 72 6f 6d 20 74 68 69 73 20 66 75 6e 63 74 69  from this functi
2820: 6f 6e 2c 20 73 6f 20 74 68 65 20 6f 75 74 70 75  on, so the outpu
2830: 74 20 69 73 6e 27 74 20 63 75 72 72 65 6e 74 6c  t isn't currentl
2840: 79 20 63 6f 6d 70 61 74 69 62 6c 65 20 77 69 74  y compatible wit
2850: 68 20 74 68 65 20 62 75 69 6c 74 20 69 6e 20 53  h the built in S
2860: 65 6c 65 63 74 2d 58 6d 6c 2c 20 62 75 74 20 69  elect-Xml, but i
2870: 73 20 65 71 75 69 76 61 6c 65 6e 74 20 74 6f 20  s equivalent to 
2880: 75 73 69 6e 67 20 53 65 6c 65 63 74 2d 58 6d 6c  using Select-Xml
2890: 20 2e 2e 2e 20 7c 20 53 65 6c 65 63 74 2d 4f 62   ... | Select-Ob
28a0: 6a 65 63 74 20 2d 45 78 70 61 6e 64 20 4e 6f 64  ject -Expand Nod
28b0: 65 0d 0a 23 0d 0a 23 20 20 41 6c 73 6f 20 6e 6f  e..#..#  Also no
28c0: 74 65 20 74 68 61 74 20 69 66 20 74 68 65 20 2d  te that if the -
28d0: 52 65 6d 6f 76 65 4e 61 6d 65 73 70 61 63 65 20  RemoveNamespace 
28e0: 73 77 69 74 63 68 20 69 73 20 73 75 70 70 6c 69  switch is suppli
28f0: 65 64 20 74 68 65 20 72 65 74 75 72 6e 65 64 20  ed the returned 
2900: 72 65 73 75 6c 74 73 20 2a 77 69 6c 6c 20 6e 6f  results *will no
2910: 74 2a 20 68 61 76 65 20 6e 61 6d 65 73 70 61 63  t* have namespac
2920: 65 73 20 69 6e 20 74 68 65 6d 2c 20 65 76 65 6e  es in them, even
2930: 20 69 66 20 74 68 65 20 69 6e 70 75 74 20 58 4d   if the input XM
2940: 4c 20 64 69 64 2c 20 61 6e 64 20 65 6e 74 69 74  L did, and entit
2950: 69 65 73 20 67 65 74 20 65 78 70 61 6e 64 65 64  ies get expanded
2960: 20 61 75 74 6f 6d 61 74 69 63 61 6c 6c 79 2e 0d   automatically..
2970: 0a 5b 43 6d 64 6c 65 74 42 69 6e 64 69 6e 67 28  .[CmdletBinding(
2980: 44 65 66 61 75 6c 74 50 61 72 61 6d 65 74 65 72  DefaultParameter
2990: 53 65 74 4e 61 6d 65 3d 22 58 6d 6c 22 29 5d 0d  SetName="Xml")].
29a0: 0a 70 61 72 61 6d 28 0d 0a 20 20 20 20 23 20 53  .param(..    # S
29b0: 70 65 63 69 66 69 65 73 20 61 6e 20 58 50 61 74  pecifies an XPat
29c0: 68 20 73 65 61 72 63 68 20 71 75 65 72 79 2e 20  h search query. 
29d0: 54 68 65 20 71 75 65 72 79 20 6c 61 6e 67 75 61  The query langua
29e0: 67 65 20 69 73 20 63 61 73 65 2d 73 65 6e 73 69  ge is case-sensi
29f0: 74 69 76 65 2e 20 54 68 69 73 20 70 61 72 61 6d  tive. This param
2a00: 65 74 65 72 20 69 73 20 72 65 71 75 69 72 65 64  eter is required
2a10: 2e 0d 0a 20 20 20 20 5b 50 61 72 61 6d 65 74 65  ...    [Paramete
2a20: 72 28 50 6f 73 69 74 69 6f 6e 3d 31 2c 4d 61 6e  r(Position=1,Man
2a30: 64 61 74 6f 72 79 3d 24 74 72 75 65 2c 56 61 6c  datory=$true,Val
2a40: 75 65 46 72 6f 6d 50 69 70 65 6c 69 6e 65 3d 24  ueFromPipeline=$
2a50: 66 61 6c 73 65 29 5d 0d 0a 20 20 20 20 5b 56 61  false)]..    [Va
2a60: 6c 69 64 61 74 65 4e 6f 74 4e 75 6c 6c 4f 72 45  lidateNotNullOrE
2a70: 6d 70 74 79 28 29 5d 0d 0a 20 20 20 20 5b 41 6c  mpty()]..    [Al
2a80: 69 61 73 28 22 51 75 65 72 79 22 29 5d 0d 0a 20  ias("Query")].. 
2a90: 20 20 20 5b 53 74 72 69 6e 67 5b 5d 5d 24 58 50     [String[]]$XP
2aa0: 61 74 68 0d 0a 2c 0d 0a 20 20 20 20 23 20 53 70  ath..,..    # Sp
2ab0: 65 63 69 66 69 65 73 20 61 20 73 74 72 69 6e 67  ecifies a string
2ac0: 20 74 68 61 74 20 63 6f 6e 74 61 69 6e 73 20 74   that contains t
2ad0: 68 65 20 58 4d 4c 20 74 6f 20 73 65 61 72 63 68  he XML to search
2ae0: 2e 20 59 6f 75 20 63 61 6e 20 61 6c 73 6f 20 70  . You can also p
2af0: 69 70 65 20 73 74 72 69 6e 67 73 20 74 6f 20 53  ipe strings to S
2b00: 65 6c 65 63 74 2d 58 4d 4c 2e 0d 0a 20 20 20 20  elect-XML...    
2b10: 5b 50 61 72 61 6d 65 74 65 72 28 50 61 72 61 6d  [Parameter(Param
2b20: 65 74 65 72 53 65 74 4e 61 6d 65 3d 22 43 6f 6e  eterSetName="Con
2b30: 74 65 6e 74 22 2c 4d 61 6e 64 61 74 6f 72 79 3d  tent",Mandatory=
2b40: 24 74 72 75 65 29 5d 0d 0a 20 20 20 20 5b 56 61  $true)]..    [Va
2b50: 6c 69 64 61 74 65 4e 6f 74 4e 75 6c 6c 4f 72 45  lidateNotNullOrE
2b60: 6d 70 74 79 28 29 5d 0d 0a 20 20 20 20 5b 53 74  mpty()]..    [St
2b70: 72 69 6e 67 5b 5d 5d 24 43 6f 6e 74 65 6e 74 0d  ring[]]$Content.
2b80: 0a 2c 0d 0a 20 20 20 20 23 20 53 70 65 63 69 66  .,..    # Specif
2b90: 69 65 73 20 74 68 65 20 70 61 74 68 20 61 6e 64  ies the path and
2ba0: 20 66 69 6c 65 20 6e 61 6d 65 73 20 6f 66 20 74   file names of t
2bb0: 68 65 20 58 4d 4c 20 66 69 6c 65 73 20 74 6f 20  he XML files to 
2bc0: 73 65 61 72 63 68 2e 20 20 57 69 6c 64 63 61 72  search.  Wildcar
2bd0: 64 73 20 61 72 65 20 70 65 72 6d 69 74 74 65 64  ds are permitted
2be0: 2e 0d 0a 20 20 20 20 5b 50 61 72 61 6d 65 74 65  ...    [Paramete
2bf0: 72 28 50 6f 73 69 74 69 6f 6e 3d 35 2c 50 61 72  r(Position=5,Par
2c00: 61 6d 65 74 65 72 53 65 74 4e 61 6d 65 3d 22 50  ameterSetName="P
2c10: 61 74 68 22 2c 4d 61 6e 64 61 74 6f 72 79 3d 24  ath",Mandatory=$
2c20: 74 72 75 65 2c 56 61 6c 75 65 46 72 6f 6d 50 69  true,ValueFromPi
2c30: 70 65 6c 69 6e 65 42 79 50 72 6f 70 65 72 74 79  pelineByProperty
2c40: 4e 61 6d 65 3d 24 74 72 75 65 29 5d 0d 0a 20 20  Name=$true)]..  
2c50: 20 20 5b 56 61 6c 69 64 61 74 65 4e 6f 74 4e 75    [ValidateNotNu
2c60: 6c 6c 4f 72 45 6d 70 74 79 28 29 5d 0d 0a 20 20  llOrEmpty()]..  
2c70: 20 20 5b 41 6c 69 61 73 28 22 50 53 50 61 74 68    [Alias("PSPath
2c80: 22 29 5d 0d 0a 20 20 20 20 5b 53 74 72 69 6e 67  ")]..    [String
2c90: 5b 5d 5d 24 50 61 74 68 0d 0a 2c 0d 0a 20 20 20  []]$Path..,..   
2ca0: 20 23 20 53 70 65 63 69 66 69 65 73 20 6f 6e 65   # Specifies one
2cb0: 20 6f 72 20 6d 6f 72 65 20 58 4d 4c 20 6e 6f 64   or more XML nod
2cc0: 65 73 20 74 6f 20 73 65 61 72 63 68 2e 0d 0a 20  es to search... 
2cd0: 20 20 20 5b 50 61 72 61 6d 65 74 65 72 28 50 6f     [Parameter(Po
2ce0: 73 69 74 69 6f 6e 3d 35 2c 50 61 72 61 6d 65 74  sition=5,Paramet
2cf0: 65 72 53 65 74 4e 61 6d 65 3d 22 58 6d 6c 22 2c  erSetName="Xml",
2d00: 4d 61 6e 64 61 74 6f 72 79 3d 24 74 72 75 65 2c  Mandatory=$true,
2d10: 56 61 6c 75 65 46 72 6f 6d 50 69 70 65 6c 69 6e  ValueFromPipelin
2d20: 65 3d 24 74 72 75 65 2c 56 61 6c 75 65 46 72 6f  e=$true,ValueFro
2d30: 6d 50 69 70 65 6c 69 6e 65 42 79 50 72 6f 70 65  mPipelineByPrope
2d40: 72 74 79 4e 61 6d 65 3d 24 74 72 75 65 29 5d 0d  rtyName=$true)].
2d50: 0a 20 20 20 20 5b 56 61 6c 69 64 61 74 65 4e 6f  .    [ValidateNo
2d60: 74 4e 75 6c 6c 4f 72 45 6d 70 74 79 28 29 5d 0d  tNullOrEmpty()].
2d70: 0a 20 20 20 20 5b 41 6c 69 61 73 28 22 4e 6f 64  .    [Alias("Nod
2d80: 65 22 29 5d 0d 0a 20 20 20 20 5b 53 79 73 74 65  e")]..    [Syste
2d90: 6d 2e 58 6d 6c 2e 58 6d 6c 4e 6f 64 65 5b 5d 5d  m.Xml.XmlNode[]]
2da0: 24 58 6d 6c 0d 0a 2c 0d 0a 20 20 20 20 23 20 53  $Xml..,..    # S
2db0: 70 65 63 69 66 69 65 73 20 61 20 68 61 73 68 20  pecifies a hash 
2dc0: 74 61 62 6c 65 20 6f 66 20 74 68 65 20 6e 61 6d  table of the nam
2dd0: 65 73 70 61 63 65 73 20 75 73 65 64 20 69 6e 20  espaces used in 
2de0: 74 68 65 20 58 4d 4c 2e 20 55 73 65 20 74 68 65  the XML. Use the
2df0: 20 66 6f 72 6d 61 74 20 40 7b 3c 6e 61 6d 65 73   format @{<names
2e00: 70 61 63 65 4e 61 6d 65 3e 20 3d 20 3c 6e 61 6d  paceName> = <nam
2e10: 65 73 70 61 63 65 55 72 69 3e 7d 2e 0d 0a 20 20  espaceUri>}...  
2e20: 20 20 5b 50 61 72 61 6d 65 74 65 72 28 50 6f 73    [Parameter(Pos
2e30: 69 74 69 6f 6e 3d 31 30 2c 4d 61 6e 64 61 74 6f  ition=10,Mandato
2e40: 72 79 3d 24 66 61 6c 73 65 29 5d 0d 0a 20 20 20  ry=$false)]..   
2e50: 20 5b 56 61 6c 69 64 61 74 65 4e 6f 74 4e 75 6c   [ValidateNotNul
2e60: 6c 4f 72 45 6d 70 74 79 28 29 5d 0d 0a 20 20 20  lOrEmpty()]..   
2e70: 20 5b 41 6c 69 61 73 28 22 4e 73 22 29 5d 0d 0a   [Alias("Ns")]..
2e80: 20 20 20 20 5b 48 61 73 68 74 61 62 6c 65 5d 24      [Hashtable]$
2e90: 4e 61 6d 65 73 70 61 63 65 0d 0a 2c 0d 0a 20 20  Namespace..,..  
2ea0: 20 20 23 20 41 6c 6c 6f 77 73 20 74 68 65 20 65    # Allows the e
2eb0: 78 65 63 75 74 69 6f 6e 20 6f 66 20 58 50 61 74  xecution of XPat
2ec0: 68 20 71 75 65 72 69 65 73 20 77 69 74 68 6f 75  h queries withou
2ed0: 74 20 6e 61 6d 65 73 70 61 63 65 20 71 75 61 6c  t namespace qual
2ee0: 69 66 69 65 72 73 2e 20 0d 0a 20 20 20 20 23 20  ifiers. ..    # 
2ef0: 0d 0a 20 20 20 20 23 20 49 66 20 79 6f 75 20 73  ..    # If you s
2f00: 70 65 63 69 66 79 20 74 68 65 20 2d 52 65 6d 6f  pecify the -Remo
2f10: 76 65 4e 61 6d 65 73 70 61 63 65 20 73 77 69 74  veNamespace swit
2f20: 63 68 2c 20 61 6c 6c 20 6e 61 6d 65 73 70 61 63  ch, all namespac
2f30: 65 20 64 65 63 6c 61 72 61 74 69 6f 6e 73 20 61  e declarations a
2f40: 6e 64 20 70 72 65 66 69 78 65 73 20 61 72 65 20  nd prefixes are 
2f50: 61 63 74 75 61 6c 6c 79 20 72 65 6d 6f 76 65 64  actually removed
2f60: 20 66 72 6f 6d 20 74 68 65 20 58 6d 6c 20 62 65   from the Xml be
2f70: 66 6f 72 65 20 74 68 65 20 58 50 61 74 68 20 73  fore the XPath s
2f80: 65 61 72 63 68 20 71 75 65 72 79 20 69 73 20 65  earch query is e
2f90: 76 61 6c 75 61 74 65 64 2c 20 61 6e 64 20 79 6f  valuated, and yo
2fa0: 75 72 20 58 50 61 74 68 20 71 75 65 72 79 20 73  ur XPath query s
2fb0: 68 6f 75 6c 64 20 74 68 65 72 65 66 6f 72 65 20  hould therefore 
2fc0: 4e 4f 54 20 63 6f 6e 74 61 69 6e 20 61 6e 79 20  NOT contain any 
2fd0: 6e 61 6d 65 73 70 61 63 65 20 70 72 65 66 69 78  namespace prefix
2fe0: 65 73 2e 0d 0a 20 20 20 20 23 20 0d 0a 20 20 20  es...    # ..   
2ff0: 20 23 20 4e 6f 74 65 20 74 68 61 74 20 74 68 69   # Note that thi
3000: 73 20 6d 65 61 6e 73 20 74 68 61 74 20 74 68 65  s means that the
3010: 20 72 65 74 75 72 6e 65 64 20 72 65 73 75 6c 74   returned result
3020: 73 20 2a 77 69 6c 6c 20 6e 6f 74 2a 20 68 61 76  s *will not* hav
3030: 65 20 6e 61 6d 65 73 70 61 63 65 73 20 69 6e 20  e namespaces in 
3040: 74 68 65 6d 2c 20 65 76 65 6e 20 69 66 20 74 68  them, even if th
3050: 65 20 69 6e 70 75 74 20 58 4d 4c 20 64 69 64 2c  e input XML did,
3060: 20 61 6e 64 20 65 6e 74 69 74 69 65 73 20 67 65   and entities ge
3070: 74 20 65 78 70 61 6e 64 65 64 20 61 75 74 6f 6d  t expanded autom
3080: 61 74 69 63 61 6c 6c 79 2e 0d 0a 20 20 20 20 5b  atically...    [
3090: 41 6c 69 61 73 28 22 52 6e 22 2c 22 52 6d 22 29  Alias("Rn","Rm")
30a0: 5d 0d 0a 20 20 20 20 5b 53 77 69 74 63 68 5d 24  ]..    [Switch]$
30b0: 52 65 6d 6f 76 65 4e 61 6d 65 73 70 61 63 65 0d  RemoveNamespace.
30c0: 0a 29 0d 0a 62 65 67 69 6e 20 7b 0d 0a 20 20 20  .)..begin {..   
30d0: 20 24 4e 53 4d 20 3d 20 24 4e 75 6c 6c 3b 20 69   $NSM = $Null; i
30e0: 66 28 24 50 53 42 6f 75 6e 64 50 61 72 61 6d 65  f($PSBoundParame
30f0: 74 65 72 73 2e 43 6f 6e 74 61 69 6e 73 4b 65 79  ters.ContainsKey
3100: 28 22 4e 61 6d 65 73 70 61 63 65 22 29 29 20 7b  ("Namespace")) {
3110: 20 24 4e 53 4d 20 3d 20 24 4e 61 6d 65 73 70 61   $NSM = $Namespa
3120: 63 65 20 7d 0d 0a 20 20 20 20 24 58 6d 6c 4e 6f  ce }..    $XmlNo
3130: 64 65 73 20 3d 20 4e 65 77 2d 4f 62 6a 65 63 74  des = New-Object
3140: 20 53 79 73 74 65 6d 2e 58 6d 6c 2e 58 6d 6c 4e   System.Xml.XmlN
3150: 6f 64 65 5b 5d 20 31 0d 0a 20 20 20 20 69 66 28  ode[] 1..    if(
3160: 24 50 53 43 6d 64 6c 65 74 2e 50 61 72 61 6d 65  $PSCmdlet.Parame
3170: 74 65 72 53 65 74 4e 61 6d 65 20 2d 65 71 20 22  terSetName -eq "
3180: 43 6f 6e 74 65 6e 74 22 29 20 7b 0d 0a 20 20 20  Content") {..   
3190: 20 20 20 20 20 24 58 6d 6c 4e 6f 64 65 73 20 3d       $XmlNodes =
31a0: 20 43 6f 6e 76 65 72 74 54 6f 2d 58 6d 6c 20 24   ConvertTo-Xml $
31b0: 43 6f 6e 74 65 6e 74 20 2d 52 65 6d 6f 76 65 4e  Content -RemoveN
31c0: 61 6d 65 73 70 61 63 65 3a 24 52 65 6d 6f 76 65  amespace:$Remove
31d0: 4e 61 6d 65 73 70 61 63 65 0d 0a 20 20 20 20 20  Namespace..     
31e0: 20 20 20 53 65 6c 65 63 74 2d 58 6d 6c 4e 6f 64     Select-XmlNod
31f0: 65 49 6e 74 65 72 6e 61 6c 20 24 58 6d 6c 4e 6f  eInternal $XmlNo
3200: 64 65 73 20 24 58 50 61 74 68 20 24 4e 53 4d 0d  des $XPath $NSM.
3210: 0a 20 20 20 20 7d 0d 0a 7d 0d 0a 70 72 6f 63 65  .    }..}..proce
3220: 73 73 20 7b 0d 0a 20 20 20 20 73 77 69 74 63 68  ss {..    switch
3230: 28 24 50 53 43 6d 64 6c 65 74 2e 50 61 72 61 6d  ($PSCmdlet.Param
3240: 65 74 65 72 53 65 74 4e 61 6d 65 29 20 7b 0d 0a  eterSetName) {..
3250: 20 20 20 20 20 20 20 20 22 50 61 74 68 22 20 7b          "Path" {
3260: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 24 6e  ..            $n
3270: 6f 64 65 20 3d 20 43 6f 6e 76 65 72 74 54 6f 2d  ode = ConvertTo-
3280: 58 6d 6c 20 24 50 61 74 68 20 2d 52 65 6d 6f 76  Xml $Path -Remov
3290: 65 4e 61 6d 65 73 70 61 63 65 3a 24 52 65 6d 6f  eNamespace:$Remo
32a0: 76 65 4e 61 6d 65 73 70 61 63 65 0d 0a 20 20 20  veNamespace..   
32b0: 20 20 20 20 20 20 20 20 20 53 65 6c 65 63 74 2d           Select-
32c0: 58 6d 6c 4e 6f 64 65 49 6e 74 65 72 6e 61 6c 20  XmlNodeInternal 
32d0: 24 6e 6f 64 65 20 24 58 50 61 74 68 20 24 4e 53  $node $XPath $NS
32e0: 4d 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20  M..        }..  
32f0: 20 20 20 20 20 20 22 58 6d 6c 22 20 7b 0d 0a 20        "Xml" {.. 
3300: 20 20 20 20 20 20 20 20 20 20 20 66 6f 72 65 61             forea
3310: 63 68 28 24 6e 6f 64 65 20 69 6e 20 24 58 6d 6c  ch($node in $Xml
3320: 29 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ) {..           
3330: 20 20 20 20 20 69 66 28 24 52 65 6d 6f 76 65 4e       if($RemoveN
3340: 61 6d 65 73 70 61 63 65 29 20 7b 0d 0a 20 20 20  amespace) {..   
3350: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
3360: 5b 58 6d 6c 5d 24 6e 6f 64 65 20 3d 20 52 65 6d  [Xml]$node = Rem
3370: 6f 76 65 2d 58 6d 6c 4e 61 6d 65 73 70 61 63 65  ove-XmlNamespace
3380: 20 2d 58 6d 6c 20 24 6e 6f 64 65 0d 0a 20 20 20   -Xml $node..   
3390: 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a               }..
33a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
33b0: 53 65 6c 65 63 74 2d 58 6d 6c 4e 6f 64 65 49 6e  Select-XmlNodeIn
33c0: 74 65 72 6e 61 6c 20 24 6e 6f 64 65 20 24 58 50  ternal $node $XP
33d0: 61 74 68 20 24 4e 53 4d 0d 0a 20 20 20 20 20 20  ath $NSM..      
33e0: 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..       
33f0: 20 7d 0d 0a 20 20 20 20 7d 0d 0a 7d 7d 0d 0a 53   }..    }..}}..S
3400: 65 74 2d 41 6c 69 61 73 20 73 6c 78 6d 6c 20 53  et-Alias slxml S
3410: 65 6c 65 63 74 2d 58 6d 6c 20 2d 45 41 20 30 0d  elect-Xml -EA 0.
3420: 0a 53 65 74 2d 41 6c 69 61 73 20 73 6c 78 20 53  .Set-Alias slx S
3430: 65 6c 65 63 74 2d 58 6d 6c 20 2d 45 41 20 30 0d  elect-Xml -EA 0.
3440: 0a 0d 0a 0d 0a 66 75 6e 63 74 69 6f 6e 20 55 70  .....function Up
3450: 64 61 74 65 2d 58 6d 6c 20 7b 0d 0a 23 2e 53 79  date-Xml {..#.Sy
3460: 6e 6f 70 73 69 73 0d 0a 23 20 20 54 68 65 20 55  nopsis..#  The U
3470: 70 64 61 74 65 2d 58 4d 4c 20 63 6d 64 6c 65 74  pdate-XML cmdlet
3480: 20 6c 65 74 73 20 79 6f 75 20 75 73 65 20 58 50   lets you use XP
3490: 61 74 68 20 71 75 65 72 69 65 73 20 74 6f 20 72  ath queries to r
34a0: 65 70 6c 61 63 65 20 74 65 78 74 20 69 6e 20 6e  eplace text in n
34b0: 6f 64 65 73 20 69 6e 20 58 4d 4c 20 64 6f 63 75  odes in XML docu
34c0: 6d 65 6e 74 73 2e 20 45 6e 74 65 72 20 61 6e 20  ments. Enter an 
34d0: 58 50 61 74 68 20 71 75 65 72 79 2c 20 61 6e 64  XPath query, and
34e0: 20 75 73 65 20 74 68 65 20 43 6f 6e 74 65 6e 74   use the Content
34f0: 2c 20 50 61 74 68 2c 20 6f 72 20 58 6d 6c 20 70  , Path, or Xml p
3500: 61 72 61 6d 65 74 65 72 20 74 6f 20 73 70 65 63  arameter to spec
3510: 69 66 79 20 74 68 65 20 58 4d 4c 20 74 6f 20 62  ify the XML to b
3520: 65 20 73 65 61 72 63 68 65 64 2e 0d 0a 23 2e 44  e searched...#.D
3530: 65 73 63 72 69 70 74 69 6f 6e 0d 0a 23 20 20 41  escription..#  A
3540: 6c 6c 6f 77 73 20 79 6f 75 20 74 6f 20 75 70 64  llows you to upd
3550: 61 74 65 20 61 6e 20 61 74 74 72 69 62 75 74 65  ate an attribute
3560: 20 76 61 6c 75 65 2c 20 78 6d 6c 20 6e 6f 64 65   value, xml node
3570: 20 63 6f 6e 74 65 6e 74 73 2c 20 65 74 63 2e 0d   contents, etc..
3580: 0a 23 0d 0a 23 2e 4e 6f 74 65 73 0d 0a 23 20 20  .#..#.Notes..#  
3590: 57 65 20 73 74 69 6c 6c 20 6e 65 65 64 20 74 6f  We still need to
35a0: 20 69 6d 70 6c 65 6d 65 6e 74 20 52 65 6d 6f 76   implement Remov
35b0: 65 4e 6f 64 65 20 61 6e 64 20 52 65 6d 6f 76 65  eNode and Remove
35c0: 41 74 74 72 69 62 75 74 65 20 61 6e 64 20 65 76  Attribute and ev
35d0: 65 6e 20 52 65 70 6c 61 63 65 4e 6f 64 65 0d 0a  en ReplaceNode..
35e0: 5b 43 6d 64 6c 65 74 42 69 6e 64 69 6e 67 28 44  [CmdletBinding(D
35f0: 65 66 61 75 6c 74 50 61 72 61 6d 65 74 65 72 53  efaultParameterS
3600: 65 74 4e 61 6d 65 3d 22 53 65 74 22 29 5d 0d 0a  etName="Set")]..
3610: 70 61 72 61 6d 28 0d 0a 20 20 20 20 23 20 53 70  param(..    # Sp
3620: 65 63 69 66 69 65 73 20 61 6e 20 58 50 61 74 68  ecifies an XPath
3630: 20 66 6f 72 20 61 6e 20 65 6c 65 6d 65 6e 74 20   for an element 
3640: 77 68 65 72 65 20 79 6f 75 20 77 61 6e 74 20 74  where you want t
3650: 6f 20 69 6e 73 65 72 74 20 74 68 65 20 6e 65 77  o insert the new
3660: 20 6e 6f 64 65 2e 0d 0a 20 20 20 20 5b 50 61 72   node...    [Par
3670: 61 6d 65 74 65 72 28 50 61 72 61 6d 65 74 65 72  ameter(Parameter
3680: 53 65 74 4e 61 6d 65 3d 22 42 65 66 6f 72 65 22  SetName="Before"
3690: 2c 4d 61 6e 64 61 74 6f 72 79 3d 24 74 72 75 65  ,Mandatory=$true
36a0: 29 5d 0d 0a 20 20 20 20 5b 56 61 6c 69 64 61 74  )]..    [Validat
36b0: 65 4e 6f 74 4e 75 6c 6c 4f 72 45 6d 70 74 79 28  eNotNullOrEmpty(
36c0: 29 5d 0d 0a 20 20 20 20 5b 53 77 69 74 63 68 5d  )]..    [Switch]
36d0: 24 42 65 66 6f 72 65 0d 0a 2c 0d 0a 20 20 20 20  $Before..,..    
36e0: 23 20 53 70 65 63 69 66 69 65 73 20 61 6e 20 58  # Specifies an X
36f0: 50 61 74 68 20 66 6f 72 20 61 6e 20 65 6c 65 6d  Path for an elem
3700: 65 6e 74 20 77 68 65 72 65 20 79 6f 75 20 77 61  ent where you wa
3710: 6e 74 20 74 6f 20 69 6e 73 65 72 74 20 74 68 65  nt to insert the
3720: 20 6e 65 77 20 6e 6f 64 65 2e 0d 0a 20 20 20 20   new node...    
3730: 5b 50 61 72 61 6d 65 74 65 72 28 50 61 72 61 6d  [Parameter(Param
3740: 65 74 65 72 53 65 74 4e 61 6d 65 3d 22 41 66 74  eterSetName="Aft
3750: 65 72 22 2c 4d 61 6e 64 61 74 6f 72 79 3d 24 74  er",Mandatory=$t
3760: 72 75 65 29 5d 0d 0a 20 20 20 20 5b 56 61 6c 69  rue)]..    [Vali
3770: 64 61 74 65 4e 6f 74 4e 75 6c 6c 4f 72 45 6d 70  dateNotNullOrEmp
3780: 74 79 28 29 5d 0d 0a 20 20 20 20 5b 53 77 69 74  ty()]..    [Swit
3790: 63 68 5d 24 41 66 74 65 72 0d 0a 2c 0d 0a 20 20  ch]$After..,..  
37a0: 20 20 23 20 49 66 20 73 65 74 2c 20 74 68 65 20    # If set, the 
37b0: 6e 65 77 20 76 61 6c 75 65 20 77 69 6c 6c 20 62  new value will b
37c0: 65 20 61 64 64 65 64 20 61 73 20 61 20 6e 65 77  e added as a new
37d0: 20 63 68 69 6c 64 20 6f 66 20 74 68 65 20 6e 6f   child of the no
37e0: 64 65 20 69 64 65 6e 74 69 66 69 65 64 20 62 79  de identified by
37f0: 20 74 68 65 20 58 50 61 74 68 0d 0a 20 20 20 20   the XPath..    
3800: 5b 50 61 72 61 6d 65 74 65 72 28 50 61 72 61 6d  [Parameter(Param
3810: 65 74 65 72 53 65 74 4e 61 6d 65 3d 22 41 70 70  eterSetName="App
3820: 65 6e 64 22 2c 4d 61 6e 64 61 74 6f 72 79 3d 24  end",Mandatory=$
3830: 74 72 75 65 29 5d 0d 0a 20 20 20 20 5b 53 77 69  true)]..    [Swi
3840: 74 63 68 5d 24 41 70 70 65 6e 64 0d 0a 2c 0d 0a  tch]$Append..,..
3850: 20 20 20 20 23 20 49 66 20 73 65 74 2c 20 74 68      # If set, th
3860: 65 20 6e 6f 64 65 20 69 64 65 6e 74 69 66 69 65  e node identifie
3870: 64 20 62 79 20 74 68 65 20 58 50 61 74 68 20 77  d by the XPath w
3880: 69 6c 6c 20 62 65 20 72 65 6d 6f 76 65 64 20 69  ill be removed i
3890: 6e 73 74 65 61 64 20 6f 66 20 73 65 74 0d 0a 20  nstead of set.. 
38a0: 20 20 20 5b 50 61 72 61 6d 65 74 65 72 28 50 61     [Parameter(Pa
38b0: 72 61 6d 65 74 65 72 53 65 74 4e 61 6d 65 3d 22  rameterSetName="
38c0: 52 65 6d 6f 76 65 22 2c 4d 61 6e 64 61 74 6f 72  Remove",Mandator
38d0: 79 3d 24 74 72 75 65 29 5d 0d 0a 20 20 20 20 5b  y=$true)]..    [
38e0: 53 77 69 74 63 68 5d 24 52 65 6d 6f 76 65 0d 0a  Switch]$Remove..
38f0: 2c 0d 0a 20 20 20 20 23 20 49 66 20 73 65 74 2c  ,..    # If set,
3900: 20 74 68 65 20 6e 6f 64 65 20 69 64 65 6e 74 69   the node identi
3910: 66 69 65 64 20 62 79 20 74 68 65 20 58 50 61 74  fied by the XPat
3920: 68 20 77 69 6c 6c 20 62 65 20 52 65 70 6c 61 63  h will be Replac
3930: 65 20 69 6e 73 74 65 61 64 20 6f 66 20 73 65 74  e instead of set
3940: 0d 0a 20 20 20 20 5b 50 61 72 61 6d 65 74 65 72  ..    [Parameter
3950: 28 50 61 72 61 6d 65 74 65 72 53 65 74 4e 61 6d  (ParameterSetNam
3960: 65 3d 22 52 65 70 6c 61 63 65 22 2c 4d 61 6e 64  e="Replace",Mand
3970: 61 74 6f 72 79 3d 24 74 72 75 65 29 5d 0d 0a 20  atory=$true)].. 
3980: 20 20 20 5b 53 77 69 74 63 68 5d 24 52 65 70 6c     [Switch]$Repl
3990: 61 63 65 0d 0a 2c 0d 0a 20 20 20 20 23 20 53 70  ace..,..    # Sp
39a0: 65 63 69 66 69 65 73 20 61 6e 20 58 50 61 74 68  ecifies an XPath
39b0: 20 66 6f 72 20 74 68 65 20 6e 6f 64 65 20 74 6f   for the node to
39c0: 20 75 70 64 61 74 65 2e 20 54 68 69 73 20 63 6f   update. This co
39d0: 75 6c 64 20 62 65 20 61 6e 20 65 6c 65 6d 65 6e  uld be an elemen
39e0: 74 20 6e 6f 64 65 20 2a 6f 72 2a 20 61 6e 20 61  t node *or* an a
39f0: 74 74 72 69 62 75 74 65 20 6e 6f 64 65 20 28 72  ttribute node (r
3a00: 65 6d 65 6d 62 65 72 3a 20 2f 2f 65 6c 65 6d 65  emember: //eleme
3a10: 6e 74 2f 40 61 74 74 72 69 62 75 74 65 20 29 0d  nt/@attribute ).
3a20: 0a 20 20 20 20 5b 50 61 72 61 6d 65 74 65 72 28  .    [Parameter(
3a30: 50 6f 73 69 74 69 6f 6e 3d 31 2c 4d 61 6e 64 61  Position=1,Manda
3a40: 74 6f 72 79 3d 24 74 72 75 65 29 5d 0d 0a 20 20  tory=$true)]..  
3a50: 20 20 5b 56 61 6c 69 64 61 74 65 4e 6f 74 4e 75    [ValidateNotNu
3a60: 6c 6c 4f 72 45 6d 70 74 79 28 29 5d 0d 0a 20 20  llOrEmpty()]..  
3a70: 20 20 5b 53 74 72 69 6e 67 5b 5d 5d 24 58 50 61    [String[]]$XPa
3a80: 74 68 0d 0a 2c 0d 0a 20 20 20 20 23 20 54 68 65  th..,..    # The
3a90: 20 6e 65 77 20 76 61 6c 75 65 20 74 6f 20 70 6c   new value to pl
3aa0: 61 63 65 20 69 6e 20 74 68 65 20 78 6d 6c 0d 0a  ace in the xml..
3ab0: 20 20 20 20 5b 50 61 72 61 6d 65 74 65 72 28 50      [Parameter(P
3ac0: 6f 73 69 74 69 6f 6e 3d 32 2c 4d 61 6e 64 61 74  osition=2,Mandat
3ad0: 6f 72 79 3d 24 74 72 75 65 2c 56 61 6c 75 65 46  ory=$true,ValueF
3ae0: 72 6f 6d 50 69 70 65 6c 69 6e 65 3d 24 66 61 6c  romPipeline=$fal
3af0: 73 65 29 5d 0d 0a 20 20 20 20 5b 56 61 6c 69 64  se)]..    [Valid
3b00: 61 74 65 4e 6f 74 4e 75 6c 6c 4f 72 45 6d 70 74  ateNotNullOrEmpt
3b10: 79 28 29 5d 0d 0a 20 20 20 20 5b 53 74 72 69 6e  y()]..    [Strin
3b20: 67 5d 24 56 61 6c 75 65 0d 0a 2c 0d 0a 20 20 20  g]$Value..,..   
3b30: 20 23 20 53 70 65 63 69 66 69 65 73 20 6f 6e 65   # Specifies one
3b40: 20 6f 72 20 6d 6f 72 65 20 58 4d 4c 20 6e 6f 64   or more XML nod
3b50: 65 73 20 74 6f 20 73 65 61 72 63 68 2e 0d 0a 20  es to search... 
3b60: 20 20 20 5b 50 61 72 61 6d 65 74 65 72 28 50 6f     [Parameter(Po
3b70: 73 69 74 69 6f 6e 3d 35 2c 4d 61 6e 64 61 74 6f  sition=5,Mandato
3b80: 72 79 3d 24 74 72 75 65 2c 56 61 6c 75 65 46 72  ry=$true,ValueFr
3b90: 6f 6d 50 69 70 65 6c 69 6e 65 3d 24 74 72 75 65  omPipeline=$true
3ba0: 2c 56 61 6c 75 65 46 72 6f 6d 50 69 70 65 6c 69  ,ValueFromPipeli
3bb0: 6e 65 42 79 50 72 6f 70 65 72 74 79 4e 61 6d 65  neByPropertyName
3bc0: 3d 24 74 72 75 65 29 5d 0d 0a 20 20 20 20 5b 56  =$true)]..    [V
3bd0: 61 6c 69 64 61 74 65 4e 6f 74 4e 75 6c 6c 4f 72  alidateNotNullOr
3be0: 45 6d 70 74 79 28 29 5d 0d 0a 20 20 20 20 5b 41  Empty()]..    [A
3bf0: 6c 69 61 73 28 22 4e 6f 64 65 22 29 5d 0d 0a 20  lias("Node")].. 
3c00: 20 20 20 5b 53 79 73 74 65 6d 2e 58 6d 6c 2e 58     [System.Xml.X
3c10: 6d 6c 4e 6f 64 65 5b 5d 5d 24 58 6d 6c 0d 0a 2c  mlNode[]]$Xml..,
3c20: 20 20 20 0d 0a 20 20 20 20 23 20 53 70 65 63 69     ..    # Speci
3c30: 66 69 65 73 20 61 20 68 61 73 68 20 74 61 62 6c  fies a hash tabl
3c40: 65 20 6f 66 20 74 68 65 20 6e 61 6d 65 73 70 61  e of the namespa
3c50: 63 65 73 20 75 73 65 64 20 69 6e 20 74 68 65 20  ces used in the 
3c60: 58 4d 4c 2e 20 55 73 65 20 74 68 65 20 66 6f 72  XML. Use the for
3c70: 6d 61 74 20 40 7b 3c 6e 61 6d 65 73 70 61 63 65  mat @{<namespace
3c80: 4e 61 6d 65 3e 20 3d 20 3c 6e 61 6d 65 73 70 61  Name> = <namespa
3c90: 63 65 55 72 69 3e 7d 2e 0d 0a 20 20 20 20 5b 50  ceUri>}...    [P
3ca0: 61 72 61 6d 65 74 65 72 28 50 6f 73 69 74 69 6f  arameter(Positio
3cb0: 6e 3d 31 30 2c 4d 61 6e 64 61 74 6f 72 79 3d 24  n=10,Mandatory=$
3cc0: 66 61 6c 73 65 29 5d 0d 0a 20 20 20 20 5b 56 61  false)]..    [Va
3cd0: 6c 69 64 61 74 65 4e 6f 74 4e 75 6c 6c 4f 72 45  lidateNotNullOrE
3ce0: 6d 70 74 79 28 29 5d 0d 0a 20 20 20 20 5b 41 6c  mpty()]..    [Al
3cf0: 69 61 73 28 22 4e 73 22 29 5d 0d 0a 20 20 20 20  ias("Ns")]..    
3d00: 5b 48 61 73 68 74 61 62 6c 65 5d 24 4e 61 6d 65  [Hashtable]$Name
3d10: 73 70 61 63 65 0d 0a 2c 20 20 20 0d 0a 20 20 20  space..,   ..   
3d20: 20 23 20 4f 75 74 70 75 74 20 74 68 65 20 58 4d   # Output the XM
3d30: 4c 20 64 6f 63 75 6d 65 6e 74 73 20 61 66 74 65  L documents afte
3d40: 72 20 61 64 64 69 6e 67 20 75 70 64 61 74 69 6e  r adding updatin
3d50: 67 20 74 68 65 6d 0d 0a 20 20 20 20 5b 53 77 69  g them..    [Swi
3d60: 74 63 68 5d 24 50 61 73 73 74 68 72 75 0d 0a 29  tch]$Passthru..)
3d70: 0d 0a 70 72 6f 63 65 73 73 0d 0a 7b 0d 0a 20 20  ..process..{..  
3d80: 20 20 66 6f 72 65 61 63 68 28 24 58 6d 6c 4e 6f    foreach($XmlNo
3d90: 64 65 20 69 6e 20 24 58 6d 6c 29 20 7b 0d 0a 20  de in $Xml) {.. 
3da0: 20 20 20 20 20 20 20 24 73 65 6c 65 63 74 20 3d         $select =
3db0: 20 40 7b 7d 0d 0a 20 20 20 20 20 20 20 20 24 73   @{}..        $s
3dc0: 65 6c 65 63 74 2e 58 6d 6c 20 3d 20 24 58 6d 6c  elect.Xml = $Xml
3dd0: 4e 6f 64 65 0d 0a 20 20 20 20 20 20 20 20 24 73  Node..        $s
3de0: 65 6c 65 63 74 2e 58 50 61 74 68 20 3d 20 24 58  elect.XPath = $X
3df0: 50 61 74 68 0d 0a 20 20 20 20 20 20 20 20 69 66  Path..        if
3e00: 28 24 4e 61 6d 65 73 70 61 63 65 29 20 7b 20 20  ($Namespace) {  
3e10: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 24 73  ..            $s
3e20: 65 6c 65 63 74 2e 4e 61 6d 65 73 70 61 63 65 20  elect.Namespace 
3e30: 3d 20 24 4e 61 6d 65 73 70 61 63 65 0d 0a 20 20  = $Namespace..  
3e40: 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..       
3e50: 20 24 64 6f 63 75 6d 65 6e 74 20 3d 0d 0a 20 20   $document =..  
3e60: 20 20 20 20 20 20 20 20 20 20 69 66 28 24 58 6d            if($Xm
3e70: 6c 4e 6f 64 65 20 2d 69 73 20 5b 53 79 73 74 65  lNode -is [Syste
3e80: 6d 2e 58 6d 6c 2e 58 6d 6c 44 6f 63 75 6d 65 6e  m.Xml.XmlDocumen
3e90: 74 5d 29 20 7b 0d 0a 20 20 20 20 20 20 20 20 20  t]) {..         
3ea0: 20 20 20 20 20 20 20 24 58 6d 6c 4e 6f 64 65 0d         $XmlNode.
3eb0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 20 65  .            } e
3ec0: 6c 73 65 20 7b 20 0d 0a 20 20 20 20 20 20 20 20  lse { ..        
3ed0: 20 20 20 20 20 20 20 20 24 58 6d 6c 4e 6f 64 65          $XmlNode
3ee0: 2e 67 65 74 5f 4f 77 6e 65 72 44 6f 63 75 6d 65  .get_OwnerDocume
3ef0: 6e 74 28 29 0d 0a 20 20 20 20 20 20 20 20 20 20  nt()..          
3f00: 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 69 66 28    }..        if(
3f10: 24 78 56 61 6c 75 65 20 3d 20 24 56 61 6c 75 65  $xValue = $Value
3f20: 20 2d 61 73 20 5b 58 6d 6c 5d 29 20 7b 0d 0a 20   -as [Xml]) {.. 
3f30: 20 20 20 20 20 20 20 20 20 20 20 24 78 56 61 6c             $xVal
3f40: 75 65 20 3d 20 24 64 6f 63 75 6d 65 6e 74 2e 49  ue = $document.I
3f50: 6d 70 6f 72 74 4e 6f 64 65 28 24 78 56 61 6c 75  mportNode($xValu
3f60: 65 2e 53 65 6c 65 63 74 53 69 6e 67 6c 65 4e 6f  e.SelectSingleNo
3f70: 64 65 28 22 2f 2a 22 29 2c 20 24 74 72 75 65 29  de("/*"), $true)
3f80: 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20  ..        }..   
3f90: 20 20 20 20 20 24 6e 6f 64 65 73 20 3d 20 53 65       $nodes = Se
3fa0: 6c 65 63 74 2d 58 6d 6c 20 40 53 65 6c 65 63 74  lect-Xml @Select
3fb0: 20 7c 20 57 68 65 72 65 2d 4f 62 6a 65 63 74 20   | Where-Object 
3fc0: 7b 20 24 5f 20 7d 0d 0a 0d 0a 20 20 20 20 20 20  { $_ }....      
3fd0: 20 20 69 66 28 40 28 24 6e 6f 64 65 73 29 2e 43    if(@($nodes).C
3fe0: 6f 75 6e 74 20 2d 65 71 20 30 29 20 7b 20 57 72  ount -eq 0) { Wr
3ff0: 69 74 65 2d 57 61 72 6e 69 6e 67 20 22 4e 6f 20  ite-Warning "No 
4000: 6e 6f 64 65 73 20 6d 61 74 63 68 65 64 20 79 6f  nodes matched yo
4010: 75 72 20 58 50 61 74 68 2c 20 6e 6f 74 68 69 6e  ur XPath, nothin
4020: 67 20 77 69 6c 6c 20 62 65 20 75 70 64 61 74 65  g will be update
4030: 64 22 20 7d 0d 0a 20 20 20 20 20 20 20 20 0d 0a  d" }..        ..
4040: 20 20 20 20 20 20 20 20 66 6f 72 65 61 63 68 28          foreach(
4050: 24 6e 6f 64 65 20 69 6e 20 24 6e 6f 64 65 73 29  $node in $nodes)
4060: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
4070: 24 73 65 6c 65 63 74 2e 58 50 61 74 68 20 3d 20  $select.XPath = 
4080: 22 24 58 50 61 74 68 2f 70 61 72 65 6e 74 3a 3a  "$XPath/parent::
4090: 2a 22 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  *"..            
40a0: 24 70 61 72 65 6e 74 20 3d 20 53 65 6c 65 63 74  $parent = Select
40b0: 2d 58 6d 6c 20 40 53 65 6c 65 63 74 0d 0a 20 20  -Xml @Select..  
40c0: 20 20 20 20 20 20 20 20 20 20 69 66 28 21 24 78            if(!$x
40d0: 56 61 6c 75 65 29 20 7b 0d 0a 20 20 20 20 20 20  Value) {..      
40e0: 20 20 20 20 20 20 20 20 20 20 69 66 28 24 6e 6f            if($no
40f0: 64 65 20 2d 69 73 20 5b 53 79 73 74 65 6d 2e 58  de -is [System.X
4100: 6d 6c 2e 58 6d 6c 41 74 74 72 69 62 75 74 65 5d  ml.XmlAttribute]
4110: 20 2d 61 6e 64 20 24 56 61 6c 75 65 2e 43 6f 6e   -and $Value.Con
4120: 74 61 69 6e 73 28 22 3d 22 29 29 20 7b 0d 0a 20  tains("=")) {.. 
4130: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
4140: 20 20 20 24 61 4e 61 6d 65 2c 20 24 61 56 61 6c     $aName, $aVal
4150: 75 65 20 3d 20 24 56 61 6c 75 65 2e 53 70 6c 69  ue = $Value.Spli
4160: 74 28 22 3d 22 2c 32 29 0d 0a 20 20 20 20 20 20  t("=",2)..      
4170: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66                if
4180: 28 24 61 4e 61 6d 65 2e 43 6f 6e 74 61 69 6e 73  ($aName.Contains
4190: 28 22 3a 22 29 29 7b 0d 0a 20 20 20 20 20 20 20  (":")){..       
41a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
41b0: 20 24 6e 73 2c 24 6e 61 6d 65 20 3d 20 24 61 4e   $ns,$name = $aN
41c0: 61 6d 65 2e 53 70 6c 69 74 28 22 3a 22 2c 32 29  ame.Split(":",2)
41d0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
41e0: 20 20 20 20 20 20 20 20 20 20 24 78 56 61 6c 75            $xValu
41f0: 65 20 3d 20 24 64 6f 63 75 6d 65 6e 74 2e 43 72  e = $document.Cr
4200: 65 61 74 65 41 74 74 72 69 62 75 74 65 28 20 24  eateAttribute( $
4210: 6e 61 6d 65 2c 20 24 4e 61 6d 65 73 70 61 63 65  name, $Namespace
4220: 5b 24 6e 73 5d 20 29 0d 0a 20 20 20 20 20 20 20  [$ns] )..       
4230: 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 20 65               } e
4240: 6c 73 65 20 7b 0d 0a 20 20 20 20 20 20 20 20 20  lse {..         
4250: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 24                 $
4260: 78 56 61 6c 75 65 20 3d 20 24 64 6f 63 75 6d 65  xValue = $docume
4270: 6e 74 2e 43 72 65 61 74 65 41 74 74 72 69 62 75  nt.CreateAttribu
4280: 74 65 28 20 24 61 4e 61 6d 65 20 29 0d 0a 20 20  te( $aName )..  
4290: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
42a0: 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20    }..           
42b0: 20 20 20 20 20 20 20 20 20 24 78 56 61 6c 75 65           $xValue
42c0: 2e 56 61 6c 75 65 20 3d 20 24 61 56 61 6c 75 65  .Value = $aValue
42d0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
42e0: 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20    }..           
42f0: 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   }..            
4300: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 73 77  ..            sw
4310: 69 74 63 68 28 24 50 53 43 6d 64 6c 65 74 2e 50  itch($PSCmdlet.P
4320: 61 72 61 6d 65 74 65 72 53 65 74 4e 61 6d 65 29  arameterSetName)
4330: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
4340: 20 20 20 20 22 42 65 66 6f 72 65 22 20 7b 0d 0a      "Before" {..
4350: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
4360: 20 20 20 20 24 6e 75 6c 6c 20 3d 20 24 70 61 72      $null = $par
4370: 65 6e 74 2e 49 6e 73 65 72 74 42 65 66 6f 72 65  ent.InsertBefore
4380: 28 20 24 78 56 61 6c 75 65 2c 20 24 6e 6f 64 65  ( $xValue, $node
4390: 20 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   )..            
43a0: 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20      }..         
43b0: 20 20 20 20 20 20 20 22 41 66 74 65 72 22 20 7b         "After" {
43c0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
43d0: 20 20 20 20 20 20 24 6e 75 6c 6c 20 3d 20 24 70        $null = $p
43e0: 61 72 65 6e 74 2e 49 6e 73 65 72 74 41 66 74 65  arent.InsertAfte
43f0: 72 28 20 24 78 56 61 6c 75 65 2c 20 24 6e 6f 64  r( $xValue, $nod
4400: 65 20 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  e )..           
4410: 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..        
4420: 20 20 20 20 20 20 20 20 22 41 70 70 65 6e 64 22          "Append"
4430: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
4440: 20 20 20 20 20 20 20 20 24 6e 75 6c 6c 20 3d 20          $null = 
4450: 24 70 61 72 65 6e 74 2e 41 70 70 65 6e 64 43 68  $parent.AppendCh
4460: 69 6c 64 28 20 24 78 56 61 6c 75 65 20 29 0d 0a  ild( $xValue )..
4470: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
4480: 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  }..             
4490: 20 20 20 22 52 65 6d 6f 76 65 22 20 7b 0d 0a 20     "Remove" {.. 
44a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
44b0: 20 20 20 24 6e 75 6c 6c 20 3d 20 24 70 61 72 65     $null = $pare
44c0: 6e 74 2e 52 65 6d 6f 76 65 43 68 69 6c 64 28 20  nt.RemoveChild( 
44d0: 24 6e 6f 64 65 20 29 0d 0a 20 20 20 20 20 20 20  $node )..       
44e0: 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20           }..    
44f0: 20 20 20 20 20 20 20 20 20 20 20 20 22 52 65 70              "Rep
4500: 6c 61 63 65 22 20 7b 0d 0a 20 20 20 20 20 20 20  lace" {..       
4510: 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 28               if(
4520: 21 24 78 56 61 6c 75 65 29 20 7b 0d 0a 20 20 20  !$xValue) {..   
4530: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
4540: 20 20 20 20 20 24 78 56 61 6c 75 65 20 3d 20 24       $xValue = $
4550: 64 6f 63 75 6d 65 6e 74 2e 43 72 65 61 74 65 54  document.CreateT
4560: 65 78 74 4e 6f 64 65 28 20 24 56 61 6c 75 65 20  extNode( $Value 
4570: 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
4580: 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..      
4590: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 24 6e                $n
45a0: 75 6c 6c 20 3d 20 24 70 61 72 65 6e 74 2e 52 65  ull = $parent.Re
45b0: 70 6c 61 63 65 43 68 69 6c 64 28 20 24 78 56 61  placeChild( $xVa
45c0: 6c 75 65 2c 20 24 6e 6f 64 65 20 29 0d 0a 20 20  lue, $node )..  
45d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d                }.
45e0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
45f0: 20 22 53 65 74 22 20 7b 0d 0a 20 20 20 20 20 20   "Set" {..      
4600: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66                if
4610: 28 21 24 78 56 61 6c 75 65 20 2d 61 6e 64 20 24  (!$xValue -and $
4620: 6e 6f 64 65 2e 22 23 74 65 78 74 22 29 20 7b 0d  node."#text") {.
4630: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
4640: 20 20 20 20 20 20 20 20 20 24 6e 6f 64 65 2e 22           $node."
4650: 23 74 65 78 74 22 20 3d 20 24 56 61 6c 75 65 0d  #text" = $Value.
4660: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
4670: 20 20 20 20 20 7d 20 65 6c 73 65 20 7b 0d 0a 20       } else {.. 
4680: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
4690: 20 20 20 20 20 20 20 69 66 28 24 6e 6f 64 65 20         if($node 
46a0: 2d 69 73 20 5b 53 79 73 74 65 6d 2e 58 6d 6c 2e  -is [System.Xml.
46b0: 58 6d 6c 45 6c 65 6d 65 6e 74 5d 29 20 7b 0d 0a  XmlElement]) {..
46c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
46d0: 20 20 20 20 20 20 20 20 20 20 20 20 69 66 28 21              if(!
46e0: 24 78 56 61 6c 75 65 29 20 7b 0d 0a 20 20 20 20  $xValue) {..    
46f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
4700: 20 20 20 20 20 20 20 20 20 20 20 20 24 78 56 61              $xVa
4710: 6c 75 65 20 3d 20 24 64 6f 63 75 6d 65 6e 74 2e  lue = $document.
4720: 43 72 65 61 74 65 54 65 78 74 4e 6f 64 65 28 20  CreateTextNode( 
4730: 24 56 61 6c 75 65 20 29 0d 0a 20 20 20 20 20 20  $Value )..      
4740: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
4750: 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..       
4760: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
4770: 20 20 20 20 20 24 6e 75 6c 6c 20 3d 20 24 6e 6f       $null = $no
4780: 64 65 2e 73 65 74 5f 69 6e 6e 65 72 58 6d 6c 28  de.set_innerXml(
4790: 22 22 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  "")..           
47a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
47b0: 20 24 6e 75 6c 6c 20 3d 20 24 6e 6f 64 65 2e 41   $null = $node.A
47c0: 70 70 65 6e 64 43 68 69 6c 64 28 24 78 56 61 6c  ppendChild($xVal
47d0: 75 65 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ue)..           
47e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a               }..
47f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
4800: 20 20 20 20 20 20 20 20 65 6c 73 65 69 66 28 24          elseif($
4810: 6e 6f 64 65 20 2d 69 73 20 5b 53 79 73 74 65 6d  node -is [System
4820: 2e 58 6d 6c 2e 58 6d 6c 41 74 74 72 69 62 75 74  .Xml.XmlAttribut
4830: 65 5d 29 20 7b 0d 0a 20 20 20 20 20 20 20 20 20  e]) {..         
4840: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
4850: 20 20 20 24 6e 6f 64 65 2e 56 61 6c 75 65 20 3d     $node.Value =
4860: 20 24 56 61 6c 75 65 0d 0a 20 20 20 20 20 20 20   $Value..       
4870: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
4880: 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 20 20 20   } else {..     
4890: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
48a0: 20 20 20 20 20 20 20 57 72 69 74 65 2d 57 61 72         Write-War
48b0: 6e 69 6e 67 20 22 24 58 50 61 74 68 20 73 65 6c  ning "$XPath sel
48c0: 65 63 74 73 20 61 20 6e 6f 64 65 20 6f 66 20 74  ects a node of t
48d0: 79 70 65 20 24 28 24 6e 6f 64 65 2e 47 65 74 54  ype $($node.GetT
48e0: 79 70 65 28 29 29 2c 20 77 68 69 63 68 20 77 65  ype()), which we
48f0: 20 68 61 76 65 6e 27 74 20 68 61 6e 64 6c 65 64   haven't handled
4900: 2e 20 50 6c 65 61 73 65 20 61 64 64 20 74 68 61  . Please add tha
4910: 74 20 68 61 6e 64 6c 65 72 21 22 0d 0a 20 20 20  t handler!"..   
4920: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
4930: 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..        
4940: 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20              }.. 
4950: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d                 }
4960: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d  ..            }.
4970: 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20  .        }..    
4980: 20 20 20 20 69 66 28 24 50 61 73 73 74 68 72 75      if($Passthru
4990: 29 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ) {..           
49a0: 20 57 72 69 74 65 2d 4f 75 74 70 75 74 20 24 58   Write-Output $X
49b0: 6d 6c 4e 6f 64 65 0d 0a 20 20 20 20 20 20 20 20  mlNode..        
49c0: 7d 0d 0a 20 20 20 20 7d 0d 0a 7d 7d 0d 0a 53 65  }..    }..}}..Se
49d0: 74 2d 41 6c 69 61 73 20 75 78 6d 6c 20 55 70 64  t-Alias uxml Upd
49e0: 61 74 65 2d 58 6d 6c 20 2d 45 41 20 30 0d 0a 53  ate-Xml -EA 0..S
49f0: 65 74 2d 41 6c 69 61 73 20 75 78 20 55 70 64 61  et-Alias ux Upda
4a00: 74 65 2d 58 6d 6c 20 2d 45 41 20 30 0d 0a 0d 0a  te-Xml -EA 0....
4a10: 66 75 6e 63 74 69 6f 6e 20 43 6f 6e 76 65 72 74  function Convert
4a20: 2d 4e 6f 64 65 20 7b 0d 0a 23 2e 53 79 6e 6f 70  -Node {..#.Synop
4a30: 73 69 73 20 0d 0a 23 20 43 6f 6e 76 65 72 74 20  sis ..# Convert 
4a40: 61 20 73 69 6e 67 6c 65 20 58 4d 4c 20 4e 6f 64  a single XML Nod
4a50: 65 20 76 69 61 20 58 53 4c 20 73 74 79 6c 65 73  e via XSL styles
4a60: 68 65 65 74 73 0d 0a 5b 43 6d 64 6c 65 74 42 69  heets..[CmdletBi
4a70: 6e 64 69 6e 67 28 44 65 66 61 75 6c 74 50 61 72  nding(DefaultPar
4a80: 61 6d 65 74 65 72 53 65 74 4e 61 6d 65 3d 22 52  ameterSetName="R
4a90: 65 61 64 65 72 22 29 5d 0d 0a 70 61 72 61 6d 28  eader")]..param(
4aa0: 0d 0a 20 20 20 5b 50 61 72 61 6d 65 74 65 72 28  ..   [Parameter(
4ab0: 50 61 72 61 6d 65 74 65 72 53 65 74 4e 61 6d 65  ParameterSetName
4ac0: 3d 22 42 79 4e 6f 64 65 22 2c 4d 61 6e 64 61 74  ="ByNode",Mandat
4ad0: 6f 72 79 3d 24 74 72 75 65 2c 56 61 6c 75 65 46  ory=$true,ValueF
4ae0: 72 6f 6d 50 69 70 65 6c 69 6e 65 3d 24 74 72 75  romPipeline=$tru
4af0: 65 29 5d 0d 0a 20 20 20 5b 53 79 73 74 65 6d 2e  e)]..   [System.
4b00: 58 6d 6c 2e 58 6d 6c 4e 6f 64 65 5d 24 4e 6f 64  Xml.XmlNode]$Nod
4b10: 65 0d 0a 2c 0d 0a 20 20 20 5b 50 61 72 61 6d 65  e..,..   [Parame
4b20: 74 65 72 28 50 61 72 61 6d 65 74 65 72 53 65 74  ter(ParameterSet
4b30: 4e 61 6d 65 3d 22 52 65 61 64 65 72 22 2c 4d 61  Name="Reader",Ma
4b40: 6e 64 61 74 6f 72 79 3d 24 74 72 75 65 2c 56 61  ndatory=$true,Va
4b50: 6c 75 65 46 72 6f 6d 50 69 70 65 6c 69 6e 65 3d  lueFromPipeline=
4b60: 24 74 72 75 65 29 5d 0d 0a 20 20 20 5b 53 79 73  $true)]..   [Sys
4b70: 74 65 6d 2e 58 6d 6c 2e 58 6d 6c 52 65 61 64 65  tem.Xml.XmlReade
4b80: 72 5d 24 58 6d 6c 52 65 61 64 65 72 0d 0a 2c 0d  r]$XmlReader..,.
4b90: 0a 20 20 20 5b 50 61 72 61 6d 65 74 65 72 28 50  .   [Parameter(P
4ba0: 6f 73 69 74 69 6f 6e 3d 31 2c 4d 61 6e 64 61 74  osition=1,Mandat
4bb0: 6f 72 79 3d 24 74 72 75 65 2c 56 61 6c 75 65 46  ory=$true,ValueF
4bc0: 72 6f 6d 50 69 70 65 6c 69 6e 65 3d 24 66 61 6c  romPipeline=$fal
4bd0: 73 65 29 5d 0d 0a 20 20 20 5b 53 79 73 74 65 6d  se)]..   [System
4be0: 2e 58 6d 6c 2e 58 73 6c 2e 58 73 6c 43 6f 6d 70  .Xml.Xsl.XslComp
4bf0: 69 6c 65 64 54 72 61 6e 73 66 6f 72 6d 5d 24 53  iledTransform]$S
4c00: 74 79 6c 65 53 68 65 65 74 0d 0a 2c 0d 0a 20 20  tyleSheet..,..  
4c10: 20 5b 50 61 72 61 6d 65 74 65 72 28 50 6f 73 69   [Parameter(Posi
4c20: 74 69 6f 6e 3d 32 2c 4d 61 6e 64 61 74 6f 72 79  tion=2,Mandatory
4c30: 3d 24 66 61 6c 73 65 29 5d 0d 0a 20 20 20 5b 41  =$false)]..   [A
4c40: 6c 69 61 73 28 22 50 61 72 61 6d 65 74 65 72 73  lias("Parameters
4c50: 22 29 5d 0d 0a 20 20 20 5b 68 61 73 68 74 61 62  ")]..   [hashtab
4c60: 6c 65 5d 24 41 72 67 75 6d 65 6e 74 73 0d 0a 29  le]$Arguments..)
4c70: 0d 0a 50 52 4f 43 45 53 53 20 7b 0d 0a 20 20 20  ..PROCESS {..   
4c80: 69 66 28 24 50 53 43 6d 64 6c 65 74 2e 50 61 72  if($PSCmdlet.Par
4c90: 61 6d 65 74 65 72 53 65 74 4e 61 6d 65 20 2d 65  ameterSetName -e
4ca0: 71 20 22 42 79 4e 6f 64 65 22 29 20 7b 0d 0a 20  q "ByNode") {.. 
4cb0: 20 20 20 20 20 24 58 6d 6c 52 65 61 64 65 72 20       $XmlReader 
4cc0: 3d 20 4e 65 77 2d 4f 62 6a 65 63 74 20 58 6d 6c  = New-Object Xml
4cd0: 2e 58 6d 6c 4e 6f 64 65 52 65 61 64 65 72 20 24  .XmlNodeReader $
4ce0: 6e 6f 64 65 0d 0a 20 20 20 7d 0d 0a 0d 0a 20 20  node..   }....  
4cf0: 20 24 6f 75 74 70 75 74 20 3d 20 4e 65 77 2d 4f   $output = New-O
4d00: 62 6a 65 63 74 20 49 4f 2e 53 74 72 69 6e 67 57  bject IO.StringW
4d10: 72 69 74 65 72 0d 0a 20 20 20 24 61 72 67 4c 69  riter..   $argLi
4d20: 73 74 20 3d 20 24 6e 75 6c 6c 0d 0a 20 20 20 0d  st = $null..   .
4d30: 0a 20 20 20 69 66 28 24 41 72 67 75 6d 65 6e 74  .   if($Argument
4d40: 73 29 20 7b 0d 0a 20 20 20 20 20 20 24 61 72 67  s) {..      $arg
4d50: 4c 69 73 74 20 3d 20 4e 65 77 2d 4f 62 6a 65 63  List = New-Objec
4d60: 74 20 53 79 73 74 65 6d 2e 58 6d 6c 2e 58 73 6c  t System.Xml.Xsl
4d70: 2e 58 73 6c 74 41 72 67 75 6d 65 6e 74 4c 69 73  .XsltArgumentLis
4d80: 74 0d 0a 20 20 20 20 20 20 66 6f 72 65 61 63 68  t..      foreach
4d90: 28 24 61 72 67 20 69 6e 20 24 41 72 67 75 6d 65  ($arg in $Argume
4da0: 6e 74 73 2e 47 65 74 45 6e 75 6d 65 72 61 74 6f  nts.GetEnumerato
4db0: 72 28 29 29 20 7b 0d 0a 20 20 20 20 20 20 20 20  r()) {..        
4dc0: 20 24 6e 61 6d 65 73 70 61 63 65 2c 20 24 6e 61   $namespace, $na
4dd0: 6d 65 20 3d 20 24 61 72 67 2e 4b 65 79 20 2d 73  me = $arg.Key -s
4de0: 70 6c 69 74 20 22 3a 22 0d 0a 20 20 20 20 20 20  plit ":"..      
4df0: 20 20 20 23 23 20 46 69 78 20 6e 61 6d 65 73 70     ## Fix namesp
4e00: 61 63 65 0d 0a 20 20 20 20 20 20 20 20 20 69 66  ace..         if
4e10: 28 21 24 6e 61 6d 65 29 20 7b 20 0d 0a 20 20 20  (!$name) { ..   
4e20: 20 20 20 20 20 20 20 20 20 24 6e 61 6d 65 20 3d           $name =
4e30: 20 24 4e 61 6d 65 73 70 61 63 65 0d 0a 20 20 20   $Namespace..   
4e40: 20 20 20 20 20 20 20 20 20 24 6e 61 6d 65 73 70           $namesp
4e50: 61 63 65 20 3d 20 22 22 0d 0a 20 20 20 20 20 20  ace = ""..      
4e60: 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 0d     }..         .
4e70: 0a 20 20 20 20 20 20 20 20 20 57 72 69 74 65 2d  .         Write-
4e80: 56 65 72 62 6f 73 65 20 22 6e 73 3a 24 6e 61 6d  Verbose "ns:$nam
4e90: 65 73 70 61 63 65 20 6e 61 6d 65 3a 24 6e 61 6d  espace name:$nam
4ea0: 65 20 76 61 6c 75 65 3a 24 28 24 61 72 67 2e 56  e value:$($arg.V
4eb0: 61 6c 75 65 29 22 0d 0a 20 20 20 20 20 20 20 20  alue)"..        
4ec0: 20 24 61 72 67 4c 69 73 74 2e 41 64 64 50 61 72   $argList.AddPar
4ed0: 61 6d 28 24 6e 61 6d 65 2c 22 24 6e 61 6d 65 73  am($name,"$names
4ee0: 70 61 63 65 22 2c 24 61 72 67 2e 56 61 6c 75 65  pace",$arg.Value
4ef0: 29 0d 0a 20 20 20 20 20 20 7d 0d 0a 20 20 20 7d  )..      }..   }
4f00: 0d 0a 20 20 20 0d 0a 20 20 20 24 53 74 79 6c 65  ..   ..   $Style
4f10: 53 68 65 65 74 2e 54 72 61 6e 73 66 6f 72 6d 28  Sheet.Transform(
4f20: 20 24 58 6d 6c 52 65 61 64 65 72 2c 20 24 61 72   $XmlReader, $ar
4f30: 67 4c 69 73 74 2c 20 24 6f 75 74 70 75 74 20 29  gList, $output )
4f40: 0d 0a 20 20 20 57 72 69 74 65 2d 4f 75 74 70 75  ..   Write-Outpu
4f50: 74 20 24 6f 75 74 70 75 74 2e 54 6f 53 74 72 69  t $output.ToStri
4f60: 6e 67 28 29 0d 0a 7d 0d 0a 7d 0d 0a 0d 0a 66 75  ng()..}..}....fu
4f70: 6e 63 74 69 6f 6e 20 43 6f 6e 76 65 72 74 2d 58  nction Convert-X
4f80: 6d 6c 20 7b 0d 0a 23 2e 53 79 6e 6f 70 73 69 73  ml {..#.Synopsis
4f90: 0d 0a 23 20 20 20 54 68 65 20 43 6f 6e 76 65 72  ..#   The Conver
4fa0: 74 2d 58 4d 4c 20 66 75 6e 63 74 69 6f 6e 20 6c  t-XML function l
4fb0: 65 74 73 20 79 6f 75 20 75 73 65 20 58 73 6c 74  ets you use Xslt
4fc0: 20 74 6f 20 74 72 61 6e 73 66 6f 72 6d 20 58 4d   to transform XM
4fd0: 4c 20 73 74 72 69 6e 67 73 20 61 6e 64 20 64 6f  L strings and do
4fe0: 63 75 6d 65 6e 74 73 2e 0d 0a 23 2e 44 65 73 63  cuments...#.Desc
4ff0: 72 69 70 74 69 6f 6e 0d 0a 23 20 20 20 44 6f 63  ription..#   Doc
5000: 75 6d 65 6e 74 61 74 69 6f 6e 20 54 4f 44 4f 0d  umentation TODO.
5010: 0a 5b 43 6d 64 6c 65 74 42 69 6e 64 69 6e 67 28  .[CmdletBinding(
5020: 44 65 66 61 75 6c 74 50 61 72 61 6d 65 74 65 72  DefaultParameter
5030: 53 65 74 4e 61 6d 65 3d 22 58 6d 6c 22 29 5d 0d  SetName="Xml")].
5040: 0a 70 61 72 61 6d 28 0d 0a 20 20 20 20 23 20 53  .param(..    # S
5050: 70 65 63 69 66 69 65 73 20 6f 6e 65 20 6f 72 20  pecifies one or 
5060: 6d 6f 72 65 20 58 4d 4c 20 6e 6f 64 65 73 20 74  more XML nodes t
5070: 6f 20 70 72 6f 63 65 73 73 2e 0d 0a 20 20 20 20  o process...    
5080: 5b 50 61 72 61 6d 65 74 65 72 28 50 6f 73 69 74  [Parameter(Posit
5090: 69 6f 6e 3d 31 2c 50 61 72 61 6d 65 74 65 72 53  ion=1,ParameterS
50a0: 65 74 4e 61 6d 65 3d 22 58 6d 6c 22 2c 4d 61 6e  etName="Xml",Man
50b0: 64 61 74 6f 72 79 3d 24 74 72 75 65 2c 56 61 6c  datory=$true,Val
50c0: 75 65 46 72 6f 6d 50 69 70 65 6c 69 6e 65 3d 24  ueFromPipeline=$
50d0: 74 72 75 65 2c 56 61 6c 75 65 46 72 6f 6d 50 69  true,ValueFromPi
50e0: 70 65 6c 69 6e 65 42 79 50 72 6f 70 65 72 74 79  pelineByProperty
50f0: 4e 61 6d 65 3d 24 74 72 75 65 29 5d 0d 0a 20 20  Name=$true)]..  
5100: 20 20 5b 56 61 6c 69 64 61 74 65 4e 6f 74 4e 75    [ValidateNotNu
5110: 6c 6c 4f 72 45 6d 70 74 79 28 29 5d 0d 0a 20 20  llOrEmpty()]..  
5120: 20 20 5b 41 6c 69 61 73 28 22 4e 6f 64 65 22 29    [Alias("Node")
5130: 5d 0d 0a 20 20 20 20 5b 53 79 73 74 65 6d 2e 58  ]..    [System.X
5140: 6d 6c 2e 58 6d 6c 4e 6f 64 65 5b 5d 5d 24 58 6d  ml.XmlNode[]]$Xm
5150: 6c 0d 0a 2c 20 20 20 0d 0a 20 20 20 20 23 20 53  l..,   ..    # S
5160: 70 65 63 69 66 69 65 73 20 61 6e 20 58 6d 6c 20  pecifies an Xml 
5170: 53 74 79 6c 65 53 68 65 65 74 20 74 6f 20 74 72  StyleSheet to tr
5180: 61 6e 73 66 6f 72 6d 20 77 69 74 68 2e 2e 2e 0d  ansform with....
5190: 0a 20 20 20 20 5b 50 61 72 61 6d 65 74 65 72 28  .    [Parameter(
51a0: 50 6f 73 69 74 69 6f 6e 3d 30 2c 4d 61 6e 64 61  Position=0,Manda
51b0: 74 6f 72 79 3d 24 74 72 75 65 2c 56 61 6c 75 65  tory=$true,Value
51c0: 46 72 6f 6d 50 69 70 65 6c 69 6e 65 3d 24 66 61  FromPipeline=$fa
51d0: 6c 73 65 29 5d 0d 0a 20 20 20 20 5b 56 61 6c 69  lse)]..    [Vali
51e0: 64 61 74 65 4e 6f 74 4e 75 6c 6c 4f 72 45 6d 70  dateNotNullOrEmp
51f0: 74 79 28 29 5d 0d 0a 20 20 20 20 5b 41 6c 69 61  ty()]..    [Alia
5200: 73 28 22 53 74 79 6c 65 53 68 65 65 74 22 29 5d  s("StyleSheet")]
5210: 0d 0a 20 20 20 20 5b 53 74 72 69 6e 67 5d 24 58  ..    [String]$X
5220: 73 6c 74 0d 0a 2c 0d 0a 20 20 20 20 23 20 53 70  slt..,..    # Sp
5230: 65 63 69 66 79 20 61 72 67 75 6d 65 6e 74 73 20  ecify arguments 
5240: 74 6f 20 74 68 65 20 58 53 4c 20 54 72 61 6e 73  to the XSL Trans
5250: 66 6f 72 6d 61 74 69 6f 6e 0d 0a 20 20 20 20 5b  formation..    [
5260: 41 6c 69 61 73 28 22 50 61 72 61 6d 65 74 65 72  Alias("Parameter
5270: 73 22 29 5d 0d 0a 20 20 20 20 5b 68 61 73 68 74  s")]..    [hasht
5280: 61 62 6c 65 5d 24 41 72 67 75 6d 65 6e 74 73 0d  able]$Arguments.
5290: 0a 29 0d 0a 62 65 67 69 6e 20 7b 20 0d 0a 20 20  .)..begin { ..  
52a0: 20 24 53 74 79 6c 65 53 68 65 65 74 20 3d 20 4e   $StyleSheet = N
52b0: 65 77 2d 4f 62 6a 65 63 74 20 53 79 73 74 65 6d  ew-Object System
52c0: 2e 58 6d 6c 2e 58 73 6c 2e 58 73 6c 43 6f 6d 70  .Xml.Xsl.XslComp
52d0: 69 6c 65 64 54 72 61 6e 73 66 6f 72 6d 0d 0a 20  iledTransform.. 
52e0: 20 20 69 66 28 54 65 73 74 2d 50 61 74 68 20 24    if(Test-Path $
52f0: 58 73 6c 74 20 2d 45 41 20 30 29 20 7b 20 0d 0a  Xslt -EA 0) { ..
5300: 20 20 20 20 20 20 57 72 69 74 65 2d 56 65 72 62        Write-Verb
5310: 6f 73 65 20 22 4c 6f 61 64 69 6e 67 20 53 74 79  ose "Loading Sty
5320: 6c 65 73 68 65 65 74 20 66 72 6f 6d 20 24 28 52  lesheet from $(R
5330: 65 73 6f 6c 76 65 2d 50 61 74 68 20 24 58 73 6c  esolve-Path $Xsl
5340: 74 29 22 0d 0a 20 20 20 20 20 20 24 53 74 79 6c  t)"..      $Styl
5350: 65 53 68 65 65 74 2e 4c 6f 61 64 28 20 28 52 65  eSheet.Load( (Re
5360: 73 6f 6c 76 65 2d 50 61 74 68 20 24 58 73 6c 74  solve-Path $Xslt
5370: 29 20 29 0d 0a 20 20 20 7d 20 65 6c 73 65 20 7b  ) )..   } else {
5380: 0d 0a 20 20 20 20 20 20 24 4f 46 53 20 3d 20 22  ..      $OFS = "
5390: 60 6e 22 0d 0a 20 20 20 20 20 20 57 72 69 74 65  `n"..      Write
53a0: 2d 56 65 72 62 6f 73 65 20 22 24 58 73 6c 74 22  -Verbose "$Xslt"
53b0: 0d 0a 20 20 20 20 20 20 24 53 74 79 6c 65 53 68  ..      $StyleSh
53c0: 65 65 74 2e 4c 6f 61 64 28 28 5b 53 79 73 74 65  eet.Load(([Syste
53d0: 6d 2e 58 6d 6c 2e 58 6d 6c 52 65 61 64 65 72 5d  m.Xml.XmlReader]
53e0: 3a 3a 43 72 65 61 74 65 28 28 4e 65 77 2d 4f 62  ::Create((New-Ob
53f0: 6a 65 63 74 20 53 79 73 74 65 6d 2e 49 4f 2e 53  ject System.IO.S
5400: 74 72 69 6e 67 52 65 61 64 65 72 20 24 58 73 6c  tringReader $Xsl
5410: 74 29 29 29 29 0d 0a 20 20 20 7d 0d 0a 7d 0d 0a  t))))..   }..}..
5420: 70 72 6f 63 65 73 73 20 7b 0d 0a 20 20 20 66 6f  process {..   fo
5430: 72 65 61 63 68 28 24 6e 6f 64 65 20 69 6e 20 24  reach($node in $
5440: 58 6d 6c 29 20 7b 0d 0a 20 20 20 20 20 20 43 6f  Xml) {..      Co
5450: 6e 76 65 72 74 2d 4e 6f 64 65 20 2d 58 6d 6c 20  nvert-Node -Xml 
5460: 28 4e 65 77 2d 4f 62 6a 65 63 74 20 58 6d 6c 2e  (New-Object Xml.
5470: 58 6d 6c 4e 6f 64 65 52 65 61 64 65 72 20 24 6e  XmlNodeReader $n
5480: 6f 64 65 29 20 24 53 74 79 6c 65 53 68 65 65 74  ode) $StyleSheet
5490: 20 24 41 72 67 75 6d 65 6e 74 73 0d 0a 20 20 20   $Arguments..   
54a0: 7d 0d 0a 7d 0d 0a 7d 0d 0a 53 65 74 2d 41 6c 69  }..}..}..Set-Ali
54b0: 61 73 20 63 76 78 6d 6c 20 43 6f 6e 76 65 72 74  as cvxml Convert
54c0: 2d 58 6d 6c 20 2d 45 41 20 30 0d 0a 0d 0a 66 75  -Xml -EA 0....fu
54d0: 6e 63 74 69 6f 6e 20 52 65 6d 6f 76 65 2d 58 6d  nction Remove-Xm
54e0: 6c 4e 61 6d 65 73 70 61 63 65 20 7b 0d 0a 23 2e  lNamespace {..#.
54f0: 53 79 6e 6f 70 73 69 73 0d 0a 23 20 20 52 65 6d  Synopsis..#  Rem
5500: 6f 76 65 73 20 6e 61 6d 65 73 70 61 63 65 20 64  oves namespace d
5510: 65 66 69 6e 69 74 69 6f 6e 73 20 61 6e 64 20 70  efinitions and p
5520: 72 65 66 69 78 65 73 20 66 72 6f 6d 20 78 6d 6c  refixes from xml
5530: 20 64 6f 63 75 6d 65 6e 74 73 0d 0a 23 2e 44 65   documents..#.De
5540: 73 63 72 69 70 74 69 6f 6e 0d 0a 23 20 20 52 75  scription..#  Ru
5550: 6e 73 20 61 6e 20 78 6d 6c 20 64 6f 63 75 6d 65  ns an xml docume
5560: 6e 74 20 74 68 72 6f 75 67 68 20 61 6e 20 58 53  nt through an XS
5570: 4c 20 54 72 61 6e 73 66 6f 72 6d 61 74 69 6f 6e  L Transformation
5580: 20 74 6f 20 72 65 6d 6f 76 65 20 6e 61 6d 65 73   to remove names
5590: 70 61 63 65 73 20 66 72 6f 6d 20 69 74 20 69 66  paces from it if
55a0: 20 74 68 65 79 20 65 78 69 73 74 2e 0d 0a 23 20   they exist...# 
55b0: 20 45 6e 74 69 74 69 65 73 20 61 72 65 20 61 6c   Entities are al
55c0: 73 6f 20 6e 61 74 75 72 61 6c 6c 79 20 65 78 70  so naturally exp
55d0: 61 6e 64 65 64 0d 0a 23 2e 50 61 72 61 6d 65 74  anded..#.Paramet
55e0: 65 72 20 43 6f 6e 74 65 6e 74 0d 0a 23 20 20 53  er Content..#  S
55f0: 70 65 63 69 66 69 65 73 20 61 20 73 74 72 69 6e  pecifies a strin
5600: 67 20 74 68 61 74 20 63 6f 6e 74 61 69 6e 73 20  g that contains 
5610: 74 68 65 20 58 4d 4c 20 74 6f 20 74 72 61 6e 73  the XML to trans
5620: 66 6f 72 6d 2e 0d 0a 23 2e 50 61 72 61 6d 65 74  form...#.Paramet
5630: 65 72 20 50 61 74 68 0d 0a 23 20 20 53 70 65 63  er Path..#  Spec
5640: 69 66 69 65 73 20 74 68 65 20 70 61 74 68 20 61  ifies the path a
5650: 6e 64 20 66 69 6c 65 20 6e 61 6d 65 73 20 6f 66  nd file names of
5660: 20 74 68 65 20 58 4d 4c 20 66 69 6c 65 73 20 74   the XML files t
5670: 6f 20 74 72 61 6e 73 66 6f 72 6d 2e 20 57 69 6c  o transform. Wil
5680: 64 63 61 72 64 73 20 61 72 65 20 70 65 72 6d 69  dcards are permi
5690: 74 74 65 64 2e 0d 0a 23 0d 0a 23 20 20 54 68 65  tted...#..#  The
56a0: 72 65 20 77 69 6c 6c 20 62 6e 65 20 6f 6e 65 20  re will bne one 
56b0: 6f 75 74 70 75 74 20 64 6f 63 75 6d 65 6e 74 20  output document 
56c0: 66 6f 72 20 65 61 63 68 20 6d 61 74 63 68 69 6e  for each matchin
56d0: 67 20 69 6e 70 75 74 20 66 69 6c 65 2e 0d 0a 23  g input file...#
56e0: 2e 50 61 72 61 6d 65 74 65 72 20 58 6d 6c 0d 0a  .Parameter Xml..
56f0: 23 20 20 53 70 65 63 69 66 69 65 73 20 6f 6e 65  #  Specifies one
5700: 20 6f 72 20 6d 6f 72 65 20 58 4d 4c 20 64 6f 63   or more XML doc
5710: 75 6d 65 6e 74 73 20 74 6f 20 74 72 61 6e 73 66  uments to transf
5720: 6f 72 6d 0d 0a 5b 43 6d 64 6c 65 74 42 69 6e 64  orm..[CmdletBind
5730: 69 6e 67 28 44 65 66 61 75 6c 74 50 61 72 61 6d  ing(DefaultParam
5740: 65 74 65 72 53 65 74 4e 61 6d 65 3d 22 58 6d 6c  eterSetName="Xml
5750: 22 29 5d 0d 0a 50 41 52 41 4d 28 0d 0a 20 20 20  ")]..PARAM(..   
5760: 5b 50 61 72 61 6d 65 74 65 72 28 50 6f 73 69 74  [Parameter(Posit
5770: 69 6f 6e 3d 31 2c 50 61 72 61 6d 65 74 65 72 53  ion=1,ParameterS
5780: 65 74 4e 61 6d 65 3d 22 58 6d 6c 22 2c 4d 61 6e  etName="Xml",Man
5790: 64 61 74 6f 72 79 3d 24 74 72 75 65 2c 56 61 6c  datory=$true,Val
57a0: 75 65 46 72 6f 6d 50 69 70 65 6c 69 6e 65 3d 24  ueFromPipeline=$
57b0: 74 72 75 65 2c 56 61 6c 75 65 46 72 6f 6d 50 69  true,ValueFromPi
57c0: 70 65 6c 69 6e 65 42 79 50 72 6f 70 65 72 74 79  pelineByProperty
57d0: 4e 61 6d 65 3d 24 74 72 75 65 29 5d 0d 0a 20 20  Name=$true)]..  
57e0: 20 5b 56 61 6c 69 64 61 74 65 4e 6f 74 4e 75 6c   [ValidateNotNul
57f0: 6c 4f 72 45 6d 70 74 79 28 29 5d 0d 0a 20 20 20  lOrEmpty()]..   
5800: 5b 41 6c 69 61 73 28 22 4e 6f 64 65 22 29 5d 0d  [Alias("Node")].
5810: 0a 20 20 20 5b 53 79 73 74 65 6d 2e 58 6d 6c 2e  .   [System.Xml.
5820: 58 6d 6c 4e 6f 64 65 5b 5d 5d 24 58 6d 6c 0d 0a  XmlNode[]]$Xml..
5830: 29 0d 0a 42 45 47 49 4e 20 7b 20 0d 0a 20 20 20  )..BEGIN { ..   
5840: 24 53 74 79 6c 65 53 68 65 65 74 20 3d 20 4e 65  $StyleSheet = Ne
5850: 77 2d 4f 62 6a 65 63 74 20 53 79 73 74 65 6d 2e  w-Object System.
5860: 58 6d 6c 2e 58 73 6c 2e 58 73 6c 43 6f 6d 70 69  Xml.Xsl.XslCompi
5870: 6c 65 64 54 72 61 6e 73 66 6f 72 6d 0d 0a 20 20  ledTransform..  
5880: 20 24 53 74 79 6c 65 53 68 65 65 74 2e 4c 6f 61   $StyleSheet.Loa
5890: 64 28 28 5b 53 79 73 74 65 6d 2e 58 6d 6c 2e 58  d(([System.Xml.X
58a0: 6d 6c 52 65 61 64 65 72 5d 3a 3a 43 72 65 61 74  mlReader]::Creat
58b0: 65 28 28 4e 65 77 2d 4f 62 6a 65 63 74 20 53 79  e((New-Object Sy
58c0: 73 74 65 6d 2e 49 4f 2e 53 74 72 69 6e 67 52 65  stem.IO.StringRe
58d0: 61 64 65 72 20 40 22 0d 0a 3c 78 73 6c 3a 73 74  ader @"..<xsl:st
58e0: 79 6c 65 73 68 65 65 74 20 76 65 72 73 69 6f 6e  ylesheet version
58f0: 3d 22 31 2e 30 22 20 78 6d 6c 6e 73 3a 78 73 6c  ="1.0" xmlns:xsl
5900: 3d 22 68 74 74 70 3a 2f 2f 77 77 77 2e 77 33 2e  ="http://www.w3.
5910: 6f 72 67 2f 31 39 39 39 2f 58 53 4c 2f 54 72 61  org/1999/XSL/Tra
5920: 6e 73 66 6f 72 6d 22 3e 0d 0a 20 20 20 3c 78 73  nsform">..   <xs
5930: 6c 3a 6f 75 74 70 75 74 20 6d 65 74 68 6f 64 3d  l:output method=
5940: 22 78 6d 6c 22 20 69 6e 64 65 6e 74 3d 22 79 65  "xml" indent="ye
5950: 73 22 2f 3e 0d 0a 20 20 20 3c 78 73 6c 3a 74 65  s"/>..   <xsl:te
5960: 6d 70 6c 61 74 65 20 6d 61 74 63 68 3d 22 2f 7c  mplate match="/|
5970: 63 6f 6d 6d 65 6e 74 28 29 7c 70 72 6f 63 65 73  comment()|proces
5980: 73 69 6e 67 2d 69 6e 73 74 72 75 63 74 69 6f 6e  sing-instruction
5990: 28 29 22 3e 0d 0a 20 20 20 20 20 20 3c 78 73 6c  ()">..      <xsl
59a0: 3a 63 6f 70 79 3e 0d 0a 20 20 20 20 20 20 20 20  :copy>..        
59b0: 20 3c 78 73 6c 3a 61 70 70 6c 79 2d 74 65 6d 70   <xsl:apply-temp
59c0: 6c 61 74 65 73 2f 3e 0d 0a 20 20 20 20 20 20 3c  lates/>..      <
59d0: 2f 78 73 6c 3a 63 6f 70 79 3e 0d 0a 20 20 20 3c  /xsl:copy>..   <
59e0: 2f 78 73 6c 3a 74 65 6d 70 6c 61 74 65 3e 0d 0a  /xsl:template>..
59f0: 0d 0a 20 20 20 3c 78 73 6c 3a 74 65 6d 70 6c 61  ..   <xsl:templa
5a00: 74 65 20 6d 61 74 63 68 3d 22 2a 22 3e 0d 0a 20  te match="*">.. 
5a10: 20 20 20 20 20 3c 78 73 6c 3a 65 6c 65 6d 65 6e       <xsl:elemen
5a20: 74 20 6e 61 6d 65 3d 22 7b 6c 6f 63 61 6c 2d 6e  t name="{local-n
5a30: 61 6d 65 28 29 7d 22 3e 0d 0a 20 20 20 20 20 20  ame()}">..      
5a40: 20 20 20 3c 78 73 6c 3a 61 70 70 6c 79 2d 74 65     <xsl:apply-te
5a50: 6d 70 6c 61 74 65 73 20 73 65 6c 65 63 74 3d 22  mplates select="
5a60: 40 2a 7c 6e 6f 64 65 28 29 22 2f 3e 0d 0a 20 20  @*|node()"/>..  
5a70: 20 20 20 20 3c 2f 78 73 6c 3a 65 6c 65 6d 65 6e      </xsl:elemen
5a80: 74 3e 0d 0a 20 20 20 3c 2f 78 73 6c 3a 74 65 6d  t>..   </xsl:tem
5a90: 70 6c 61 74 65 3e 0d 0a 0d 0a 20 20 20 3c 78 73  plate>....   <xs
5aa0: 6c 3a 74 65 6d 70 6c 61 74 65 20 6d 61 74 63 68  l:template match
5ab0: 3d 22 40 2a 22 3e 0d 0a 20 20 20 20 20 20 3c 78  ="@*">..      <x
5ac0: 73 6c 3a 61 74 74 72 69 62 75 74 65 20 6e 61 6d  sl:attribute nam
5ad0: 65 3d 22 7b 6c 6f 63 61 6c 2d 6e 61 6d 65 28 29  e="{local-name()
5ae0: 7d 22 3e 0d 0a 20 20 20 20 20 20 20 20 20 3c 78  }">..         <x
5af0: 73 6c 3a 76 61 6c 75 65 2d 6f 66 20 73 65 6c 65  sl:value-of sele
5b00: 63 74 3d 22 2e 22 2f 3e 0d 0a 20 20 20 20 20 20  ct="."/>..      
5b10: 3c 2f 78 73 6c 3a 61 74 74 72 69 62 75 74 65 3e  </xsl:attribute>
5b20: 0d 0a 20 20 20 3c 2f 78 73 6c 3a 74 65 6d 70 6c  ..   </xsl:templ
5b30: 61 74 65 3e 0d 0a 3c 2f 78 73 6c 3a 73 74 79 6c  ate>..</xsl:styl
5b40: 65 73 68 65 65 74 3e 0d 0a 22 40 29 29 29 29 0d  esheet>.."@)))).
5b50: 0a 20 20 20 5b 54 65 78 74 2e 53 74 72 69 6e 67  .   [Text.String
5b60: 42 75 69 6c 64 65 72 5d 24 58 6d 6c 43 6f 6e 74  Builder]$XmlCont
5b70: 65 6e 74 20 3d 20 5b 53 74 72 69 6e 67 5d 3a 3a  ent = [String]::
5b80: 45 6d 70 74 79 20 0d 0a 7d 0d 0a 50 52 4f 43 45  Empty ..}..PROCE
5b90: 53 53 20 7b 0d 0a 20 20 20 24 58 6d 6c 20 7c 20  SS {..   $Xml | 
5ba0: 43 6f 6e 76 65 72 74 2d 4e 6f 64 65 20 24 53 74  Convert-Node $St
5bb0: 79 6c 65 53 68 65 65 74 0d 0a 7d 0d 0a 7d 0d 0a  yleSheet..}..}..
5bc0: 53 65 74 2d 41 6c 69 61 73 20 72 6d 6e 73 20 52  Set-Alias rmns R
5bd0: 65 6d 6f 76 65 2d 58 6d 6c 4e 61 6d 65 73 70 61  emove-XmlNamespa
5be0: 63 65 20 2d 45 41 20 30 0d 0a 53 65 74 2d 41 6c  ce -EA 0..Set-Al
5bf0: 69 61 73 20 72 6d 78 6e 73 20 52 65 6d 6f 76 65  ias rmxns Remove
5c00: 2d 58 6d 6c 4e 61 6d 65 73 70 61 63 65 20 2d 45  -XmlNamespace -E
5c10: 41 20 30 0d 0a 0d 0a 23 23 23 23 23 23 23 23 20  A 0....######## 
5c20: 48 65 6c 70 65 72 20 66 75 6e 63 74 69 6f 6e 73  Helper functions
5c30: 20 66 6f 72 20 77 6f 72 6b 69 6e 67 20 77 69 74   for working wit
5c40: 68 20 43 6c 69 58 6d 6c 0d 0a 0d 0a 66 75 6e 63  h CliXml....func
5c50: 74 69 6f 6e 20 43 6f 6e 76 65 72 74 46 72 6f 6d  tion ConvertFrom
5c60: 2d 43 6c 69 58 6d 6c 20 7b 0d 0a 20 20 20 70 61  -CliXml {..   pa
5c70: 72 61 6d 28 0d 0a 20 20 20 20 20 20 5b 50 61 72  ram(..      [Par
5c80: 61 6d 65 74 65 72 28 50 6f 73 69 74 69 6f 6e 3d  ameter(Position=
5c90: 30 2c 20 4d 61 6e 64 61 74 6f 72 79 3d 24 74 72  0, Mandatory=$tr
5ca0: 75 65 2c 20 56 61 6c 75 65 46 72 6f 6d 50 69 70  ue, ValueFromPip
5cb0: 65 6c 69 6e 65 3d 24 74 72 75 65 29 5d 0d 0a 20  eline=$true)].. 
5cc0: 20 20 20 20 20 5b 56 61 6c 69 64 61 74 65 4e 6f       [ValidateNo
5cd0: 74 4e 75 6c 6c 4f 72 45 6d 70 74 79 28 29 5d 0d  tNullOrEmpty()].
5ce0: 0a 20 20 20 20 20 20 5b 53 74 72 69 6e 67 5b 5d  .      [String[]
5cf0: 5d 24 49 6e 70 75 74 4f 62 6a 65 63 74 0d 0a 20  ]$InputObject.. 
5d00: 20 20 29 0d 0a 20 20 20 62 65 67 69 6e 0d 0a 20    )..   begin.. 
5d10: 20 20 7b 0d 0a 20 20 20 20 20 20 24 4f 46 53 20    {..      $OFS 
5d20: 3d 20 22 60 6e 22 0d 0a 20 20 20 20 20 20 5b 53  = "`n"..      [S
5d30: 74 72 69 6e 67 5d 24 78 6d 6c 53 74 72 69 6e 67  tring]$xmlString
5d40: 20 3d 20 22 22 0d 0a 20 20 20 7d 0d 0a 20 20 20   = ""..   }..   
5d50: 70 72 6f 63 65 73 73 0d 0a 20 20 20 7b 0d 0a 20  process..   {.. 
5d60: 20 20 20 20 20 24 78 6d 6c 53 74 72 69 6e 67 20       $xmlString 
5d70: 2b 3d 20 24 49 6e 70 75 74 4f 62 6a 65 63 74 0d  += $InputObject.
5d80: 0a 20 20 20 7d 0d 0a 20 20 20 65 6e 64 0d 0a 20  .   }..   end.. 
5d90: 20 20 7b 0d 0a 20 20 20 20 20 20 24 74 79 70 65    {..      $type
5da0: 20 3d 20 5b 74 79 70 65 5d 3a 3a 67 65 74 74 79   = [type]::getty
5db0: 70 65 28 22 53 79 73 74 65 6d 2e 4d 61 6e 61 67  pe("System.Manag
5dc0: 65 6d 65 6e 74 2e 41 75 74 6f 6d 61 74 69 6f 6e  ement.Automation
5dd0: 2e 44 65 73 65 72 69 61 6c 69 7a 65 72 22 29 0d  .Deserializer").
5de0: 0a 20 20 20 20 20 20 24 63 74 6f 72 20 3d 20 24  .      $ctor = $
5df0: 74 79 70 65 2e 67 65 74 63 6f 6e 73 74 72 75 63  type.getconstruc
5e00: 74 6f 72 28 22 69 6e 73 74 61 6e 63 65 2c 6e 6f  tor("instance,no
5e10: 6e 70 75 62 6c 69 63 22 2c 20 24 6e 75 6c 6c 2c  npublic", $null,
5e20: 20 40 28 5b 78 6d 6c 2e 78 6d 6c 72 65 61 64 65   @([xml.xmlreade
5e30: 72 5d 29 2c 20 24 6e 75 6c 6c 29 0d 0a 20 20 20  r]), $null)..   
5e40: 20 20 20 24 73 72 20 3d 20 6e 65 77 2d 6f 62 6a     $sr = new-obj
5e50: 65 63 74 20 53 79 73 74 65 6d 2e 49 4f 2e 53 74  ect System.IO.St
5e60: 72 69 6e 67 52 65 61 64 65 72 20 24 78 6d 6c 53  ringReader $xmlS
5e70: 74 72 69 6e 67 0d 0a 20 20 20 20 20 20 24 78 72  tring..      $xr
5e80: 20 3d 20 6e 65 77 2d 6f 62 6a 65 63 74 20 53 79   = new-object Sy
5e90: 73 74 65 6d 2e 58 6d 6c 2e 58 6d 6c 54 65 78 74  stem.Xml.XmlText
5ea0: 52 65 61 64 65 72 20 24 73 72 0d 0a 20 20 20 20  Reader $sr..    
5eb0: 20 20 24 64 65 73 65 72 69 61 6c 69 7a 65 72 20    $deserializer 
5ec0: 3d 20 24 63 74 6f 72 2e 69 6e 76 6f 6b 65 28 24  = $ctor.invoke($
5ed0: 78 72 29 0d 0a 20 20 20 20 20 20 24 6d 65 74 68  xr)..      $meth
5ee0: 6f 64 20 3d 20 40 28 24 74 79 70 65 2e 67 65 74  od = @($type.get
5ef0: 6d 65 74 68 6f 64 73 28 22 6e 6f 6e 70 75 62 6c  methods("nonpubl
5f00: 69 63 2c 69 6e 73 74 61 6e 63 65 22 29 20 7c 20  ic,instance") | 
5f10: 77 68 65 72 65 2d 6f 62 6a 65 63 74 20 7b 24 5f  where-object {$_
5f20: 2e 6e 61 6d 65 20 2d 6c 69 6b 65 20 22 44 65 73  .name -like "Des
5f30: 65 72 69 61 6c 69 7a 65 22 7d 29 5b 31 5d 0d 0a  erialize"})[1]..
5f40: 20 20 20 20 20 20 24 64 6f 6e 65 20 3d 20 24 74        $done = $t
5f50: 79 70 65 2e 67 65 74 6d 65 74 68 6f 64 28 22 44  ype.getmethod("D
5f60: 6f 6e 65 22 2c 20 5b 53 79 73 74 65 6d 2e 52 65  one", [System.Re
5f70: 66 6c 65 63 74 69 6f 6e 2e 42 69 6e 64 69 6e 67  flection.Binding
5f80: 46 6c 61 67 73 5d 22 6e 6f 6e 70 75 62 6c 69 63  Flags]"nonpublic
5f90: 2c 69 6e 73 74 61 6e 63 65 22 29 0d 0a 20 20 20  ,instance")..   
5fa0: 20 20 20 77 68 69 6c 65 20 28 21 24 64 6f 6e 65     while (!$done
5fb0: 2e 69 6e 76 6f 6b 65 28 24 64 65 73 65 72 69 61  .invoke($deseria
5fc0: 6c 69 7a 65 72 2c 20 40 28 29 29 29 0d 0a 20 20  lizer, @()))..  
5fd0: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
5fe0: 74 72 79 20 7b 0d 0a 20 20 20 20 20 20 20 20 20  try {..         
5ff0: 20 20 20 24 6d 65 74 68 6f 64 2e 69 6e 76 6f 6b     $method.invok
6000: 65 28 24 64 65 73 65 72 69 61 6c 69 7a 65 72 2c  e($deserializer,
6010: 20 22 22 29 0d 0a 20 20 20 20 20 20 20 20 20 7d   "")..         }
6020: 20 63 61 74 63 68 20 7b 0d 0a 20 20 20 20 20 20   catch {..      
6030: 20 20 20 20 20 20 77 72 69 74 65 2d 77 61 72 6e        write-warn
6040: 69 6e 67 20 22 43 6f 75 6c 64 20 6e 6f 74 20 64  ing "Could not d
6050: 65 73 65 72 69 61 6c 69 7a 65 20 24 73 74 72 69  eserialize $stri
6060: 6e 67 3a 20 24 5f 22 0d 0a 20 20 20 20 20 20 20  ng: $_"..       
6070: 20 20 7d 0d 0a 20 20 20 20 20 20 7d 0d 0a 20 20    }..      }..  
6080: 20 20 20 20 24 78 72 2e 43 6c 6f 73 65 28 29 0d      $xr.Close().
6090: 0a 20 20 20 20 20 20 24 73 72 2e 44 69 73 70 6f  .      $sr.Dispo
60a0: 73 65 28 29 0d 0a 20 20 20 7d 0d 0a 7d 0d 0a 0d  se()..   }..}...
60b0: 0a 66 75 6e 63 74 69 6f 6e 20 43 6f 6e 76 65 72  .function Conver
60c0: 74 54 6f 2d 43 6c 69 58 6d 6c 20 7b 0d 0a 20 20  tTo-CliXml {..  
60d0: 20 70 61 72 61 6d 28 0d 0a 20 20 20 20 20 20 5b   param(..      [
60e0: 50 61 72 61 6d 65 74 65 72 28 50 6f 73 69 74 69  Parameter(Positi
60f0: 6f 6e 3d 30 2c 20 4d 61 6e 64 61 74 6f 72 79 3d  on=0, Mandatory=
6100: 24 74 72 75 65 2c 20 56 61 6c 75 65 46 72 6f 6d  $true, ValueFrom
6110: 50 69 70 65 6c 69 6e 65 3d 24 74 72 75 65 29 5d  Pipeline=$true)]
6120: 0d 0a 20 20 20 20 20 20 5b 56 61 6c 69 64 61 74  ..      [Validat
6130: 65 4e 6f 74 4e 75 6c 6c 4f 72 45 6d 70 74 79 28  eNotNullOrEmpty(
6140: 29 5d 0d 0a 20 20 20 20 20 20 5b 50 53 4f 62 6a  )]..      [PSObj
6150: 65 63 74 5b 5d 5d 24 49 6e 70 75 74 4f 62 6a 65  ect[]]$InputObje
6160: 63 74 0d 0a 20 20 20 29 0d 0a 20 20 20 62 65 67  ct..   )..   beg
6170: 69 6e 20 7b 0d 0a 20 20 20 20 20 20 24 74 79 70  in {..      $typ
6180: 65 20 3d 20 5b 74 79 70 65 5d 3a 3a 67 65 74 74  e = [type]::gett
6190: 79 70 65 28 22 53 79 73 74 65 6d 2e 4d 61 6e 61  ype("System.Mana
61a0: 67 65 6d 65 6e 74 2e 41 75 74 6f 6d 61 74 69 6f  gement.Automatio
61b0: 6e 2e 53 65 72 69 61 6c 69 7a 65 72 22 29 0d 0a  n.Serializer")..
61c0: 20 20 20 20 20 20 24 63 74 6f 72 20 3d 20 24 74        $ctor = $t
61d0: 79 70 65 2e 67 65 74 63 6f 6e 73 74 72 75 63 74  ype.getconstruct
61e0: 6f 72 28 22 69 6e 73 74 61 6e 63 65 2c 6e 6f 6e  or("instance,non
61f0: 70 75 62 6c 69 63 22 2c 20 24 6e 75 6c 6c 2c 20  public", $null, 
6200: 40 28 5b 53 79 73 74 65 6d 2e 58 6d 6c 2e 58 6d  @([System.Xml.Xm
6210: 6c 57 72 69 74 65 72 5d 29 2c 20 24 6e 75 6c 6c  lWriter]), $null
6220: 29 0d 0a 20 20 20 20 20 20 24 73 77 20 3d 20 6e  )..      $sw = n
6230: 65 77 2d 6f 62 6a 65 63 74 20 53 79 73 74 65 6d  ew-object System
6240: 2e 49 4f 2e 53 74 72 69 6e 67 57 72 69 74 65 72  .IO.StringWriter
6250: 0d 0a 20 20 20 20 20 20 24 78 77 20 3d 20 6e 65  ..      $xw = ne
6260: 77 2d 6f 62 6a 65 63 74 20 53 79 73 74 65 6d 2e  w-object System.
6270: 58 6d 6c 2e 58 6d 6c 54 65 78 74 57 72 69 74 65  Xml.XmlTextWrite
6280: 72 20 24 73 77 0d 0a 20 20 20 20 20 20 24 73 65  r $sw..      $se
6290: 72 69 61 6c 69 7a 65 72 20 3d 20 24 63 74 6f 72  rializer = $ctor
62a0: 2e 69 6e 76 6f 6b 65 28 24 78 77 29 0d 0a 20 20  .invoke($xw)..  
62b0: 20 20 20 20 24 6d 65 74 68 6f 64 20 3d 20 24 74      $method = $t
62c0: 79 70 65 2e 67 65 74 6d 65 74 68 6f 64 28 22 53  ype.getmethod("S
62d0: 65 72 69 61 6c 69 7a 65 22 2c 20 22 6e 6f 6e 70  erialize", "nonp
62e0: 75 62 6c 69 63 2c 69 6e 73 74 61 6e 63 65 22 2c  ublic,instance",
62f0: 20 24 6e 75 6c 6c 2c 20 5b 74 79 70 65 5b 5d 5d   $null, [type[]]
6300: 40 28 5b 6f 62 6a 65 63 74 5d 29 2c 20 24 6e 75  @([object]), $nu
6310: 6c 6c 29 0d 0a 20 20 20 20 20 20 24 64 6f 6e 65  ll)..      $done
6320: 20 3d 20 24 74 79 70 65 2e 67 65 74 6d 65 74 68   = $type.getmeth
6330: 6f 64 28 22 44 6f 6e 65 22 2c 20 5b 53 79 73 74  od("Done", [Syst
6340: 65 6d 2e 52 65 66 6c 65 63 74 69 6f 6e 2e 42 69  em.Reflection.Bi
6350: 6e 64 69 6e 67 46 6c 61 67 73 5d 22 6e 6f 6e 70  ndingFlags]"nonp
6360: 75 62 6c 69 63 2c 69 6e 73 74 61 6e 63 65 22 29  ublic,instance")
6370: 0d 0a 20 20 20 7d 0d 0a 20 20 20 70 72 6f 63 65  ..   }..   proce
6380: 73 73 20 7b 0d 0a 20 20 20 20 20 20 74 72 79 20  ss {..      try 
6390: 7b 0d 0a 20 20 20 20 20 20 20 20 20 5b 76 6f 69  {..         [voi
63a0: 64 5d 24 6d 65 74 68 6f 64 2e 69 6e 76 6f 6b 65  d]$method.invoke
63b0: 28 24 73 65 72 69 61 6c 69 7a 65 72 2c 20 24 49  ($serializer, $I
63c0: 6e 70 75 74 4f 62 6a 65 63 74 29 0d 0a 20 20 20  nputObject)..   
63d0: 20 20 20 7d 20 63 61 74 63 68 20 7b 0d 0a 20 20     } catch {..  
63e0: 20 20 20 20 20 20 20 77 72 69 74 65 2d 77 61 72         write-war
63f0: 6e 69 6e 67 20 22 43 6f 75 6c 64 20 6e 6f 74 20  ning "Could not 
6400: 73 65 72 69 61 6c 69 7a 65 20 24 28 24 49 6e 70  serialize $($Inp
6410: 75 74 4f 62 6a 65 63 74 2e 67 65 74 74 79 70 65  utObject.gettype
6420: 28 29 29 3a 20 24 5f 22 0d 0a 20 20 20 20 20 20  ()): $_"..      
6430: 7d 0d 0a 20 20 20 7d 0d 0a 20 20 20 65 6e 64 20  }..   }..   end 
6440: 7b 20 20 20 20 0d 0a 20 20 20 20 20 20 5b 76 6f  {    ..      [vo
6450: 69 64 5d 24 64 6f 6e 65 2e 69 6e 76 6f 6b 65 28  id]$done.invoke(
6460: 24 73 65 72 69 61 6c 69 7a 65 72 2c 20 40 28 29  $serializer, @()
6470: 29 0d 0a 20 20 20 20 20 20 24 73 77 2e 54 6f 53  )..      $sw.ToS
6480: 74 72 69 6e 67 28 29 0d 0a 20 20 20 20 20 20 24  tring()..      $
6490: 78 77 2e 43 6c 6f 73 65 28 29 0d 0a 20 20 20 20  xw.Close()..    
64a0: 20 20 24 73 77 2e 44 69 73 70 6f 73 65 28 29 0d    $sw.Dispose().
64b0: 0a 20 20 20 7d 0d 0a 7d 0d 0a 0d 0a 0d 0a 23 23  .   }..}......##
64c0: 23 23 23 23 23 23 20 46 72 6f 6d 20 68 65 72 65  ###### From here
64d0: 20 64 6f 77 6e 20 69 73 20 61 6c 6c 20 74 68 65   down is all the
64e0: 20 63 6f 64 65 20 72 65 6c 61 74 65 64 20 74 6f   code related to
64f0: 20 6d 79 20 58 4d 4c 20 44 53 4c 3a 0d 0a 0d 0a   my XML DSL:....
6500: 66 75 6e 63 74 69 6f 6e 20 4e 65 77 2d 58 44 6f  function New-XDo
6510: 63 75 6d 65 6e 74 20 7b 0d 0a 23 2e 53 79 6e 6f  cument {..#.Syno
6520: 70 73 69 73 0d 0a 23 20 20 20 43 72 65 61 74 65  psis..#   Create
6530: 73 20 61 20 6e 65 77 20 58 44 6f 63 75 6d 65 6e  s a new XDocumen
6540: 74 20 28 74 68 65 20 6e 65 77 20 78 6d 6c 20 64  t (the new xml d
6550: 6f 63 75 6d 65 6e 74 20 74 79 70 65 29 0d 0a 23  ocument type)..#
6560: 2e 44 65 73 63 72 69 70 74 69 6f 6e 0d 0a 23 20  .Description..# 
6570: 20 54 68 69 73 20 69 73 20 74 68 65 20 72 6f 6f   This is the roo
6580: 74 20 66 6f 72 20 61 20 6e 65 77 20 58 4d 4c 20  t for a new XML 
6590: 6d 69 6e 69 2d 64 73 6c 2c 20 61 6b 69 6e 20 74  mini-dsl, akin t
65a0: 6f 20 4e 65 77 2d 42 6f 6f 74 73 57 69 6e 64 6f  o New-BootsWindo
65b0: 77 20 66 6f 72 20 58 41 4d 4c 0d 0a 23 20 20 49  w for XAML..#  I
65c0: 74 20 63 72 65 61 74 65 73 20 61 20 6e 65 77 20  t creates a new 
65d0: 58 44 6f 63 75 6d 65 6e 74 2c 20 61 6e 64 20 74  XDocument, and t
65e0: 61 6b 65 73 20 73 63 72 69 74 70 62 6c 6f 63 6b  akes scritpblock
65f0: 28 73 29 20 74 6f 20 64 65 66 69 6e 65 20 69 74  (s) to define it
6600: 27 73 20 63 6f 6e 74 65 6e 74 73 0d 0a 23 2e 50  's contents..#.P
6610: 61 72 61 6d 65 74 65 72 20 72 6f 6f 74 0d 0a 23  arameter root..#
6620: 20 20 20 54 68 65 20 72 6f 6f 74 20 6e 6f 64 65     The root node
6630: 20 6e 61 6d 65 0d 0a 23 2e 50 61 72 61 6d 65 74   name..#.Paramet
6640: 65 72 20 76 65 72 73 69 6f 6e 0d 0a 23 20 20 20  er version..#   
6650: 4f 70 74 69 6f 6e 61 6c 3a 20 74 68 65 20 58 4d  Optional: the XM
6660: 4c 20 76 65 72 73 69 6f 6e 2e 20 44 65 66 61 75  L version. Defau
6670: 6c 74 73 20 74 6f 20 31 2e 30 0d 0a 23 2e 50 61  lts to 1.0..#.Pa
6680: 72 61 6d 65 74 65 72 20 65 6e 63 6f 64 69 6e 67  rameter encoding
6690: 0d 0a 23 20 20 20 4f 70 74 69 6f 6e 61 6c 3a 20  ..#   Optional: 
66a0: 74 68 65 20 45 6e 63 6f 64 69 6e 67 2e 20 44 65  the Encoding. De
66b0: 66 61 75 6c 74 73 20 74 6f 20 55 54 46 2d 38 0d  faults to UTF-8.
66c0: 0a 23 2e 50 61 72 61 6d 65 74 65 72 20 73 74 61  .#.Parameter sta
66d0: 6e 64 61 6c 6f 6e 65 0d 0a 23 20 20 4f 70 74 69  ndalone..#  Opti
66e0: 6f 6e 61 6c 3a 20 77 68 65 74 68 65 72 20 74 6f  onal: whether to
66f0: 20 73 70 65 63 69 66 79 20 73 74 61 6e 64 61 6c   specify standal
6700: 6f 6e 65 20 69 6e 20 74 68 65 20 78 6d 6c 20 64  one in the xml d
6710: 65 63 6c 61 72 61 74 69 6f 6e 2e 20 44 65 66 61  eclaration. Defa
6720: 75 6c 74 73 20 74 6f 20 22 79 65 73 22 0d 0a 23  ults to "yes"..#
6730: 2e 50 61 72 61 6d 65 74 65 72 20 61 72 67 73 0d  .Parameter args.
6740: 0a 23 20 20 20 74 68 69 73 20 69 73 20 77 68 65  .#   this is whe
6750: 72 65 20 61 6c 6c 20 74 68 65 20 64 73 6c 20 6d  re all the dsl m
6760: 61 67 69 63 20 68 61 70 70 65 6e 73 2e 20 50 6c  agic happens. Pl
6770: 65 61 73 65 20 73 65 65 20 74 68 65 20 45 78 61  ease see the Exa
6780: 6d 70 6c 65 73 2e 20 3a 29 0d 0a 23 0d 0a 23 2e  mples. :)..#..#.
6790: 45 78 61 6d 70 6c 65 0d 0a 23 20 5b 73 74 72 69  Example..# [stri
67a0: 6e 67 5d 24 78 6d 6c 20 3d 20 4e 65 77 2d 58 44  ng]$xml = New-XD
67b0: 6f 63 75 6d 65 6e 74 20 72 73 73 20 2d 76 65 72  ocument rss -ver
67c0: 73 69 6f 6e 20 22 32 2e 30 22 20 7b 0d 0a 23 20  sion "2.0" {..# 
67d0: 20 20 20 63 68 61 6e 6e 65 6c 20 7b 0d 0a 23 20     channel {..# 
67e0: 20 20 20 20 20 20 74 69 74 6c 65 20 7b 22 54 65        title {"Te
67f0: 73 74 20 52 53 53 20 46 65 65 64 22 7d 0d 0a 23  st RSS Feed"}..#
6800: 20 20 20 20 20 20 20 6c 69 6e 6b 20 7b 22 68 74         link {"ht
6810: 74 70 60 3a 2f 2f 48 75 64 64 6c 65 64 4d 61 73  tp`://HuddledMas
6820: 73 65 73 2e 6f 72 67 22 7d 0d 0a 23 20 20 20 20  ses.org"}..#    
6830: 20 20 20 64 65 73 63 72 69 70 74 69 6f 6e 20 7b     description {
6840: 22 41 6e 20 52 53 53 20 46 65 65 64 20 67 65 6e  "An RSS Feed gen
6850: 65 72 61 74 65 64 20 73 69 6d 70 6c 79 20 74 6f  erated simply to
6860: 20 64 65 6d 6f 6e 73 74 72 61 74 65 20 6d 79 20   demonstrate my 
6870: 58 4d 4c 20 44 53 4c 22 7d 0d 0a 23 20 20 20 20  XML DSL"}..#    
6880: 20 20 20 69 74 65 6d 20 7b 0d 0a 23 20 20 20 20     item {..#    
6890: 20 20 20 20 20 20 74 69 74 6c 65 20 7b 22 54 68        title {"Th
68a0: 65 20 46 69 72 73 74 20 49 74 65 6d 22 7d 0d 0a  e First Item"}..
68b0: 23 20 20 20 20 20 20 20 20 20 20 6c 69 6e 6b 20  #          link 
68c0: 7b 22 68 74 74 70 60 3a 2f 2f 68 75 64 64 6c 65  {"http`://huddle
68d0: 64 6d 61 73 73 65 73 2e 6f 72 67 2f 6e 65 77 2d  dmasses.org/new-
68e0: 73 69 74 65 2d 6e 65 77 2d 6c 61 79 6f 75 74 2d  site-new-layout-
68f0: 6c 6f 73 74 2d 70 6f 73 74 73 2f 22 7d 0d 0a 23  lost-posts/"}..#
6900: 20 20 20 20 20 20 20 20 20 20 67 75 69 64 20 2d            guid -
6910: 69 73 50 65 72 6d 61 4c 69 6e 6b 20 74 72 75 65  isPermaLink true
6920: 20 7b 22 68 74 74 70 60 3a 2f 2f 68 75 64 64 6c   {"http`://huddl
6930: 65 64 6d 61 73 73 65 73 2e 6f 72 67 2f 6e 65 77  edmasses.org/new
6940: 2d 73 69 74 65 2d 6e 65 77 2d 6c 61 79 6f 75 74  -site-new-layout
6950: 2d 6c 6f 73 74 2d 70 6f 73 74 73 2f 22 7d 0d 0a  -lost-posts/"}..
6960: 23 20 20 20 20 20 20 20 20 20 20 64 65 73 63 72  #          descr
6970: 69 70 74 69 6f 6e 20 7b 22 45 6d 61 20 4c 61 7a  iption {"Ema Laz
6980: 61 72 75 73 27 20 50 6f 65 6d 22 7d 0d 0a 23 20  arus' Poem"}..# 
6990: 20 20 20 20 20 20 20 20 20 70 75 62 44 61 74 65           pubDate
69a0: 20 7b 28 47 65 74 2d 44 61 74 65 20 31 30 2f 33   {(Get-Date 10/3
69b0: 31 2f 32 30 30 33 20 2d 66 20 75 29 20 2d 72 65  1/2003 -f u) -re
69c0: 70 6c 61 63 65 20 22 20 22 2c 22 54 22 7d 0d 0a  place " ","T"}..
69d0: 23 20 20 20 20 20 20 20 7d 0d 0a 23 20 20 20 20  #       }..#    
69e0: 7d 0d 0a 23 20 7d 0d 0a 23 0d 0a 23 20 43 3a 5c  }..# }..#..# C:\
69f0: 50 53 3e 24 78 6d 6c 2e 44 65 63 6c 61 72 61 74  PS>$xml.Declarat
6a00: 69 6f 6e 2e 54 6f 53 74 72 69 6e 67 28 29 20 20  ion.ToString()  
6a10: 23 23 20 49 20 63 61 6e 27 74 20 66 69 6e 64 20  ## I can't find 
6a20: 61 20 77 61 79 20 74 6f 20 68 61 76 65 20 74 68  a way to have th
6a30: 69 73 20 69 6e 63 6c 75 64 65 64 20 69 6e 20 74  is included in t
6a40: 68 65 20 24 78 6d 6c 2e 54 6f 53 74 72 69 6e 67  he $xml.ToString
6a50: 28 29 0d 0a 23 20 43 3a 5c 50 53 3e 24 78 6d 6c  ()..# C:\PS>$xml
6a60: 2e 54 6f 53 74 72 69 6e 67 28 29 0d 0a 23 0d 0a  .ToString()..#..
6a70: 23 20 3c 3f 78 6d 6c 20 76 65 72 73 69 6f 6e 3d  # <?xml version=
6a80: 22 31 2e 30 22 20 65 6e 63 6f 64 69 6e 67 3d 22  "1.0" encoding="
6a90: 55 54 46 2d 38 22 20 73 74 61 6e 64 61 6c 6f 6e  UTF-8" standalon
6aa0: 65 3d 22 79 65 73 22 3f 3e 0d 0a 23 20 3c 72 73  e="yes"?>..# <rs
6ab0: 73 20 76 65 72 73 69 6f 6e 3d 22 32 2e 30 22 3e  s version="2.0">
6ac0: 0d 0a 23 20 20 20 3c 63 68 61 6e 6e 65 6c 3e 0d  ..#   <channel>.
6ad0: 0a 23 20 20 20 20 20 3c 74 69 74 6c 65 3e 54 65  .#     <title>Te
6ae0: 73 74 20 52 53 53 20 46 65 65 64 3c 2f 74 69 74  st RSS Feed</tit
6af0: 6c 65 3e 0d 0a 23 20 20 20 20 20 3c 6c 69 6e 6b  le>..#     <link
6b00: 3e 68 74 74 70 20 3a 2f 2f 48 75 64 64 6c 65 64  >http ://Huddled
6b10: 4d 61 73 73 65 73 2e 6f 72 67 3c 2f 6c 69 6e 6b  Masses.org</link
6b20: 3e 0d 0a 23 20 20 20 20 20 3c 64 65 73 63 72 69  >..#     <descri
6b30: 70 74 69 6f 6e 3e 41 6e 20 52 53 53 20 46 65 65  ption>An RSS Fee
6b40: 64 20 67 65 6e 65 72 61 74 65 64 20 73 69 6d 70  d generated simp
6b50: 6c 79 20 74 6f 20 64 65 6d 6f 6e 73 74 72 61 74  ly to demonstrat
6b60: 65 20 6d 79 20 58 4d 4c 20 44 53 4c 3c 2f 64 65  e my XML DSL</de
6b70: 73 63 72 69 70 74 69 6f 6e 3e 0d 0a 23 20 20 20  scription>..#   
6b80: 20 20 3c 69 74 65 6d 3e 0d 0a 23 20 20 20 20 20    <item>..#     
6b90: 20 20 3c 74 69 74 6c 65 3e 54 68 65 20 46 69 72    <title>The Fir
6ba0: 73 74 20 49 74 65 6d 3c 2f 74 69 74 6c 65 3e 0d  st Item</title>.
6bb0: 0a 23 20 20 20 20 20 20 20 3c 6c 69 6e 6b 3e 68  .#       <link>h
6bc0: 74 74 70 20 3a 2f 2f 68 75 64 64 6c 65 64 6d 61  ttp ://huddledma
6bd0: 73 73 65 73 2e 6f 72 67 2f 6e 65 77 2d 73 69 74  sses.org/new-sit
6be0: 65 2d 6e 65 77 2d 6c 61 79 6f 75 74 2d 6c 6f 73  e-new-layout-los
6bf0: 74 2d 70 6f 73 74 73 2f 3c 2f 6c 69 6e 6b 3e 0d  t-posts/</link>.
6c00: 0a 23 20 20 20 20 20 20 20 3c 67 75 69 64 20 69  .#       <guid i
6c10: 73 50 65 72 6d 61 4c 69 6e 6b 3d 22 74 72 75 65  sPermaLink="true
6c20: 22 3e 68 74 74 70 20 3a 2f 2f 68 75 64 64 6c 65  ">http ://huddle
6c30: 64 6d 61 73 73 65 73 2e 6f 72 67 2f 6e 65 77 2d  dmasses.org/new-
6c40: 73 69 74 65 2d 6e 65 77 2d 6c 61 79 6f 75 74 2d  site-new-layout-
6c50: 6c 6f 73 74 2d 70 6f 73 74 73 2f 3c 2f 67 75 69  lost-posts/</gui
6c60: 64 3e 0d 0a 23 20 20 20 20 20 20 20 3c 64 65 73  d>..#       <des
6c70: 63 72 69 70 74 69 6f 6e 3e 45 6d 61 20 4c 61 7a  cription>Ema Laz
6c80: 61 72 75 73 27 20 50 6f 65 6d 3c 2f 64 65 73 63  arus' Poem</desc
6c90: 72 69 70 74 69 6f 6e 3e 0d 0a 23 20 20 20 20 20  ription>..#     
6ca0: 20 20 3c 70 75 62 44 61 74 65 3e 32 30 30 33 2d    <pubDate>2003-
6cb0: 31 30 2d 33 31 54 30 30 3a 30 30 3a 30 30 5a 3c  10-31T00:00:00Z<
6cc0: 2f 70 75 62 44 61 74 65 3e 0d 0a 23 20 20 20 20  /pubDate>..#    
6cd0: 20 3c 2f 69 74 65 6d 3e 0d 0a 23 20 20 20 3c 2f   </item>..#   </
6ce0: 63 68 61 6e 6e 65 6c 3e 0d 0a 23 20 3c 2f 72 73  channel>..# </rs
6cf0: 73 3e 0d 0a 23 0d 0a 23 0d 0a 23 20 44 65 73 63  s>..#..#..# Desc
6d00: 72 69 70 74 69 6f 6e 0d 0a 23 20 2d 2d 2d 2d 2d  ription..# -----
6d10: 2d 2d 2d 2d 2d 2d 0d 0a 23 20 54 68 69 73 20 65  ------..# This e
6d20: 78 61 6d 70 6c 65 20 73 68 6f 77 73 20 74 68 65  xample shows the
6d30: 20 63 72 65 61 74 69 6f 6e 20 6f 66 20 61 20 63   creation of a c
6d40: 6f 6d 70 6c 65 74 65 20 52 53 53 20 66 65 65 64  omplete RSS feed
6d50: 20 77 69 74 68 20 61 20 73 69 6e 67 6c 65 20 69   with a single i
6d60: 74 65 6d 20 69 6e 20 69 74 2e 20 0d 0a 23 0d 0a  tem in it. ..#..
6d70: 23 20 4e 4f 54 45 20 74 68 61 74 20 74 68 65 20  # NOTE that the 
6d80: 62 61 63 6b 74 69 63 6b 20 69 6e 20 74 68 65 20  backtick in the 
6d90: 68 74 74 70 60 3a 20 69 6e 20 74 68 65 20 55 52  http`: in the UR
6da0: 4c 73 20 69 6e 20 74 68 65 20 69 6e 70 75 74 20  Ls in the input 
6db0: 69 73 20 75 6e 65 63 65 73 73 61 72 79 2c 20 61  is unecessary, a
6dc0: 6e 64 20 49 20 61 64 64 65 64 20 74 68 65 20 73  nd I added the s
6dd0: 70 61 63 65 20 61 66 74 65 72 20 74 68 65 20 68  pace after the h
6de0: 74 74 70 3a 20 69 6e 20 74 68 65 20 55 52 4c 73  ttp: in the URLs
6df0: 20 20 69 6e 20 74 68 65 20 6f 75 74 70 75 74 20    in the output 
6e00: 2d 2d 20 74 68 65 73 65 20 61 72 65 20 61 63 63  -- these are acc
6e10: 6f 6d 6f 64 61 74 69 6f 6e 73 20 74 6f 20 50 6f  omodations to Po
6e20: 73 68 43 6f 64 65 27 73 20 73 70 61 6d 20 66 69  shCode's spam fi
6e30: 6c 74 65 72 2e 20 42 61 63 6b 74 69 63 6b 73 20  lter. Backticks 
6e40: 61 72 65 20 6e 6f 74 20 6e 65 65 64 20 69 6e 20  are not need in 
6e50: 74 68 65 20 69 6e 70 75 74 2c 20 61 6e 64 20 73  the input, and s
6e60: 70 61 63 65 73 20 64 6f 20 6e 6f 74 20 61 70 70  paces do not app
6e70: 65 61 72 20 69 6e 20 74 68 65 20 61 63 74 75 61  ear in the actua
6e80: 6c 20 6f 75 74 70 75 74 2e 0d 0a 23 0d 0a 23 0d  l output...#..#.
6e90: 0a 23 2e 45 78 61 6d 70 6c 65 20 0d 0a 23 20 5b  .#.Example ..# [
6ea0: 58 4e 61 6d 65 73 70 61 63 65 5d 24 61 74 6f 6d  XNamespace]$atom
6eb0: 3d 22 68 74 74 70 60 3a 2f 2f 77 77 77 2e 77 33  ="http`://www.w3
6ec0: 2e 6f 72 67 2f 32 30 30 35 2f 41 74 6f 6d 22 0d  .org/2005/Atom".
6ed0: 0a 23 20 43 3a 5c 50 53 3e 5b 58 4e 61 6d 65 73  .# C:\PS>[XNames
6ee0: 70 61 63 65 5d 24 64 63 20 3d 20 22 68 74 74 70  pace]$dc = "http
6ef0: 60 3a 2f 2f 70 75 72 6c 2e 6f 72 67 2f 64 63 2f  `://purl.org/dc/
6f00: 65 6c 65 6d 65 6e 74 73 2f 31 2e 31 22 0d 0a 23  elements/1.1"..#
6f10: 20 0d 0a 23 20 43 3a 5c 50 53 3e 4e 65 77 2d 58   ..# C:\PS>New-X
6f20: 44 6f 63 75 6d 65 6e 74 20 28 24 61 74 6f 6d 20  Document ($atom 
6f30: 2b 20 22 66 65 65 64 22 29 20 2d 45 6e 63 6f 64  + "feed") -Encod
6f40: 69 6e 67 20 22 55 54 46 2d 31 36 22 20 2d 24 28  ing "UTF-16" -$(
6f50: 5b 58 4e 61 6d 65 73 70 61 63 65 5d 3a 3a 58 6d  [XNamespace]::Xm
6f60: 6c 20 2b 27 6c 61 6e 67 27 29 20 22 65 6e 2d 55  l +'lang') "en-U
6f70: 53 22 20 2d 64 63 20 24 64 63 20 7b 0d 0a 23 20  S" -dc $dc {..# 
6f80: 20 20 20 74 69 74 6c 65 20 7b 22 54 65 73 74 20     title {"Test 
6f90: 46 69 72 73 74 20 45 6e 74 72 79 22 7d 0d 0a 23  First Entry"}..#
6fa0: 20 20 20 20 6c 69 6e 6b 20 7b 22 68 74 74 70 60      link {"http`
6fb0: 3a 2f 2f 48 75 64 64 6c 65 64 4d 61 73 73 65 73  ://HuddledMasses
6fc0: 2e 6f 72 67 22 7d 0d 0a 23 20 20 20 20 75 70 64  .org"}..#    upd
6fd0: 61 74 65 64 20 7b 28 47 65 74 2d 44 61 74 65 20  ated {(Get-Date 
6fe0: 2d 66 20 75 29 20 2d 72 65 70 6c 61 63 65 20 22  -f u) -replace "
6ff0: 20 22 2c 22 54 22 7d 0d 0a 23 20 20 20 20 61 75   ","T"}..#    au
7000: 74 68 6f 72 20 7b 0d 0a 23 20 20 20 20 20 20 20  thor {..#       
7010: 6e 61 6d 65 20 7b 22 4a 6f 65 6c 20 42 65 6e 6e  name {"Joel Benn
7020: 65 74 74 22 7d 0d 0a 23 20 20 20 20 20 20 20 75  ett"}..#       u
7030: 72 69 20 7b 22 68 74 74 70 60 3a 2f 2f 48 75 64  ri {"http`://Hud
7040: 64 6c 65 64 4d 61 73 73 65 73 2e 6f 72 67 22 7d  dledMasses.org"}
7050: 0d 0a 23 20 20 20 20 7d 0d 0a 23 20 20 20 20 69  ..#    }..#    i
7060: 64 20 7b 22 68 74 74 70 60 3a 2f 2f 68 75 64 64  d {"http`://hudd
7070: 6c 65 64 6d 61 73 73 65 73 2e 6f 72 67 2f 22 20  ledmasses.org/" 
7080: 7d 0d 0a 23 0d 0a 23 20 20 20 20 65 6e 74 72 79  }..#..#    entry
7090: 20 7b 0d 0a 23 20 20 20 20 20 20 20 74 69 74 6c   {..#       titl
70a0: 65 20 7b 22 54 65 73 74 20 46 69 72 73 74 20 45  e {"Test First E
70b0: 6e 74 72 79 22 7d 0d 0a 23 20 20 20 20 20 20 20  ntry"}..#       
70c0: 6c 69 6e 6b 20 7b 22 68 74 74 70 60 3a 2f 2f 48  link {"http`://H
70d0: 75 64 64 6c 65 64 4d 61 73 73 65 73 2e 6f 72 67  uddledMasses.org
70e0: 2f 6e 65 77 2d 73 69 74 65 2d 6e 65 77 2d 6c 61  /new-site-new-la
70f0: 79 6f 75 74 2d 6c 6f 73 74 2d 70 6f 73 74 73 2f  yout-lost-posts/
7100: 22 20 7d 0d 0a 23 20 20 20 20 20 20 20 69 64 20  " }..#       id 
7110: 7b 22 68 74 74 70 60 3a 2f 2f 68 75 64 64 6c 65  {"http`://huddle
7120: 64 6d 61 73 73 65 73 2e 6f 72 67 2f 6e 65 77 2d  dmasses.org/new-
7130: 73 69 74 65 2d 6e 65 77 2d 6c 61 79 6f 75 74 2d  site-new-layout-
7140: 6c 6f 73 74 2d 70 6f 73 74 73 2f 22 20 7d 0d 0a  lost-posts/" }..
7150: 23 20 20 20 20 20 20 20 75 70 64 61 74 65 64 20  #       updated 
7160: 7b 28 47 65 74 2d 44 61 74 65 20 31 30 2f 33 31  {(Get-Date 10/31
7170: 2f 32 30 30 33 20 2d 66 20 75 29 20 2d 72 65 70  /2003 -f u) -rep
7180: 6c 61 63 65 20 22 20 22 2c 22 54 22 7d 0d 0a 23  lace " ","T"}..#
7190: 20 20 20 20 20 20 20 73 75 6d 6d 61 72 79 20 7b         summary {
71a0: 22 45 6d 61 20 4c 61 7a 61 72 75 73 27 20 50 6f  "Ema Lazarus' Po
71b0: 65 6d 22 7d 0d 0a 23 20 20 20 20 20 20 20 6c 69  em"}..#       li
71c0: 6e 6b 20 2d 72 65 6c 20 6c 69 63 65 6e 73 65 20  nk -rel license 
71d0: 2d 68 72 65 66 20 22 68 74 74 70 60 3a 2f 2f 63  -href "http`://c
71e0: 72 65 61 74 69 76 65 63 6f 6d 6d 6f 6e 73 2e 6f  reativecommons.o
71f0: 72 67 2f 6c 69 63 65 6e 73 65 73 2f 62 79 2f 33  rg/licenses/by/3
7200: 2e 30 2f 22 20 2d 74 69 74 6c 65 20 22 43 43 20  .0/" -title "CC 
7210: 42 79 2d 41 74 74 72 69 62 75 74 69 6f 6e 22 0d  By-Attribution".
7220: 0a 23 20 20 20 20 20 20 20 64 63 3a 72 69 67 68  .#       dc:righ
7230: 74 73 20 7b 20 22 43 6f 70 79 72 69 67 68 74 20  ts { "Copyright 
7240: 32 30 30 39 2c 20 53 6f 6d 65 20 72 69 67 68 74  2009, Some right
7250: 73 20 72 65 73 65 72 76 65 64 20 28 6c 69 63 65  s reserved (lice
7260: 6e 73 65 64 20 75 6e 64 65 72 20 74 68 65 20 43  nsed under the C
7270: 72 65 61 74 69 76 65 20 43 6f 6d 6d 6f 6e 73 20  reative Commons 
7280: 41 74 74 72 69 62 75 74 69 6f 6e 20 33 2e 30 20  Attribution 3.0 
7290: 55 6e 70 6f 72 74 65 64 20 6c 69 63 65 6e 73 65  Unported license
72a0: 29 22 20 7d 0d 0a 23 20 20 20 20 20 20 20 63 61  )" }..#       ca
72b0: 74 65 67 6f 72 79 20 2d 73 63 68 65 6d 65 20 22  tegory -scheme "
72c0: 68 74 74 70 60 3a 2f 2f 68 75 64 64 6c 65 64 6d  http`://huddledm
72d0: 61 73 73 65 73 2e 6f 72 67 2f 74 61 67 2f 22 20  asses.org/tag/" 
72e0: 2d 74 65 72 6d 20 22 68 75 64 64 6c 65 64 2d 6d  -term "huddled-m
72f0: 61 73 73 65 73 22 0d 0a 23 20 20 20 20 7d 0d 0a  asses"..#    }..
7300: 23 20 7d 20 7c 20 25 20 7b 20 24 5f 2e 44 65 63  # } | % { $_.Dec
7310: 6c 61 72 61 74 69 6f 6e 2e 54 6f 53 74 72 69 6e  laration.ToStrin
7320: 67 28 29 3b 20 24 5f 2e 54 6f 53 74 72 69 6e 67  g(); $_.ToString
7330: 28 29 20 7d 0d 0a 23 0d 0a 23 20 3c 3f 78 6d 6c  () }..#..# <?xml
7340: 20 76 65 72 73 69 6f 6e 3d 22 31 2e 30 22 20 65   version="1.0" e
7350: 6e 63 6f 64 69 6e 67 3d 22 55 54 46 2d 31 36 22  ncoding="UTF-16"
7360: 20 73 74 61 6e 64 61 6c 6f 6e 65 3d 22 79 65 73   standalone="yes
7370: 22 3f 3e 0d 0a 23 20 3c 66 65 65 64 20 78 6d 6c  "?>..# <feed xml
7380: 3a 6c 61 6e 67 3d 22 65 6e 2d 55 53 22 20 78 6d  :lang="en-US" xm
7390: 6c 6e 73 3d 22 68 74 74 70 20 3a 2f 2f 77 77 77  lns="http ://www
73a0: 2e 77 33 2e 6f 72 67 2f 32 30 30 35 2f 41 74 6f  .w3.org/2005/Ato
73b0: 6d 22 3e 0d 0a 23 20 20 20 3c 74 69 74 6c 65 3e  m">..#   <title>
73c0: 54 65 73 74 20 46 69 72 73 74 20 45 6e 74 72 79  Test First Entry
73d0: 3c 2f 74 69 74 6c 65 3e 0d 0a 23 20 20 20 3c 6c  </title>..#   <l
73e0: 69 6e 6b 3e 68 74 74 70 20 3a 2f 2f 48 75 64 64  ink>http ://Hudd
73f0: 6c 65 64 4d 61 73 73 65 73 2e 6f 72 67 3c 2f 6c  ledMasses.org</l
7400: 69 6e 6b 3e 0d 0a 23 20 20 20 3c 75 70 64 61 74  ink>..#   <updat
7410: 65 64 3e 32 30 30 39 2d 30 37 2d 32 39 54 31 37  ed>2009-07-29T17
7420: 3a 32 35 3a 34 39 5a 3c 2f 75 70 64 61 74 65 64  :25:49Z</updated
7430: 3e 0d 0a 23 20 20 20 3c 61 75 74 68 6f 72 3e 0d  >..#   <author>.
7440: 0a 23 20 20 20 20 20 20 3c 6e 61 6d 65 3e 4a 6f  .#      <name>Jo
7450: 65 6c 20 42 65 6e 6e 65 74 74 3c 2f 6e 61 6d 65  el Bennett</name
7460: 3e 0d 0a 23 20 20 20 20 20 20 3c 75 72 69 3e 68  >..#      <uri>h
7470: 74 74 70 20 3a 2f 2f 48 75 64 64 6c 65 64 4d 61  ttp ://HuddledMa
7480: 73 73 65 73 2e 6f 72 67 3c 2f 75 72 69 3e 0d 0a  sses.org</uri>..
7490: 23 20 20 20 3c 2f 61 75 74 68 6f 72 3e 0d 0a 23  #   </author>..#
74a0: 20 20 20 3c 69 64 3e 68 74 74 70 20 3a 2f 2f 68     <id>http ://h
74b0: 75 64 64 6c 65 64 6d 61 73 73 65 73 2e 6f 72 67  uddledmasses.org
74c0: 2f 3c 2f 69 64 3e 0d 0a 23 20 20 20 3c 65 6e 74  /</id>..#   <ent
74d0: 72 79 3e 0d 0a 23 20 20 20 20 20 3c 74 69 74 6c  ry>..#     <titl
74e0: 65 3e 54 65 73 74 20 46 69 72 73 74 20 45 6e 74  e>Test First Ent
74f0: 72 79 3c 2f 74 69 74 6c 65 3e 0d 0a 23 20 20 20  ry</title>..#   
7500: 20 20 3c 6c 69 6e 6b 3e 68 74 74 70 20 3a 2f 2f    <link>http ://
7510: 48 75 64 64 6c 65 64 4d 61 73 73 65 73 2e 6f 72  HuddledMasses.or
7520: 67 2f 6e 65 77 2d 73 69 74 65 2d 6e 65 77 2d 6c  g/new-site-new-l
7530: 61 79 6f 75 74 2d 6c 6f 73 74 2d 70 6f 73 74 73  ayout-lost-posts
7540: 2f 3c 2f 6c 69 6e 6b 3e 0d 0a 23 20 20 20 20 20  /</link>..#     
7550: 3c 69 64 3e 68 74 74 70 20 3a 2f 2f 68 75 64 64  <id>http ://hudd
7560: 6c 65 64 6d 61 73 73 65 73 2e 6f 72 67 2f 6e 65  ledmasses.org/ne
7570: 77 2d 73 69 74 65 2d 6e 65 77 2d 6c 61 79 6f 75  w-site-new-layou
7580: 74 2d 6c 6f 73 74 2d 70 6f 73 74 73 2f 3c 2f 69  t-lost-posts/</i
7590: 64 3e 0d 0a 23 20 20 20 20 20 3c 75 70 64 61 74  d>..#     <updat
75a0: 65 64 3e 32 30 30 33 2d 31 30 2d 33 31 54 30 30  ed>2003-10-31T00
75b0: 3a 30 30 3a 30 30 5a 3c 2f 75 70 64 61 74 65 64  :00:00Z</updated
75c0: 3e 0d 0a 23 20 20 20 20 20 3c 73 75 6d 6d 61 72  >..#     <summar
75d0: 79 3e 45 6d 61 20 4c 61 7a 61 72 75 73 27 20 50  y>Ema Lazarus' P
75e0: 6f 65 6d 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 23  oem</summary>..#
75f0: 20 20 20 20 20 3c 6c 69 6e 6b 20 72 65 6c 3d 22       <link rel="
7600: 6c 69 63 65 6e 73 65 22 20 68 72 65 66 3d 22 68  license" href="h
7610: 74 74 70 20 3a 2f 2f 63 72 65 61 74 69 76 65 63  ttp ://creativec
7620: 6f 6d 6d 6f 6e 73 2e 6f 72 67 2f 6c 69 63 65 6e  ommons.org/licen
7630: 73 65 73 2f 62 79 2f 33 2e 30 2f 22 20 74 69 74  ses/by/3.0/" tit
7640: 6c 65 3d 22 43 43 20 42 79 2d 41 74 74 72 69 62  le="CC By-Attrib
7650: 75 74 69 6f 6e 22 20 2f 3e 0d 0a 23 20 20 20 20  ution" />..#    
7660: 20 3c 64 63 3a 72 69 67 68 74 73 3e 43 6f 70 79   <dc:rights>Copy
7670: 72 69 67 68 74 20 32 30 30 39 2c 20 53 6f 6d 65  right 2009, Some
7680: 20 72 69 67 68 74 73 20 72 65 73 65 72 76 65 64   rights reserved
7690: 20 28 6c 69 63 65 6e 73 65 64 20 75 6e 64 65 72   (licensed under
76a0: 20 74 68 65 20 43 72 65 61 74 69 76 65 20 43 6f   the Creative Co
76b0: 6d 6d 6f 6e 73 20 41 74 74 72 69 62 75 74 69 6f  mmons Attributio
76c0: 6e 20 33 2e 30 20 55 6e 70 6f 72 74 65 64 20 6c  n 3.0 Unported l
76d0: 69 63 65 6e 73 65 29 3c 2f 64 63 3a 72 69 67 68  icense)</dc:righ
76e0: 74 73 3e 0d 0a 23 20 20 20 20 20 3c 63 61 74 65  ts>..#     <cate
76f0: 67 6f 72 79 20 73 63 68 65 6d 65 3d 22 68 74 74  gory scheme="htt
7700: 70 20 3a 2f 2f 68 75 64 64 6c 65 64 6d 61 73 73  p ://huddledmass
7710: 65 73 2e 6f 72 67 2f 74 61 67 2f 22 20 74 65 72  es.org/tag/" ter
7720: 6d 3d 22 68 75 64 64 6c 65 64 2d 6d 61 73 73 65  m="huddled-masse
7730: 73 22 20 2f 3e 0d 0a 23 20 20 20 3c 2f 65 6e 74  s" />..#   </ent
7740: 72 79 3e 0d 0a 23 20 3c 2f 66 65 65 64 3e 0d 0a  ry>..# </feed>..
7750: 23 0d 0a 23 0d 0a 23 20 44 65 73 63 72 69 70 74  #..#..# Descript
7760: 69 6f 6e 0d 0a 23 20 2d 2d 2d 2d 2d 2d 2d 2d 2d  ion..# ---------
7770: 2d 2d 0d 0a 23 20 54 68 69 73 20 65 78 61 6d 70  --..# This examp
7780: 6c 65 20 73 68 6f 77 73 20 74 68 65 20 75 73 65  le shows the use
7790: 20 6f 66 20 61 20 64 65 66 61 75 6c 74 20 6e 61   of a default na
77a0: 6d 65 73 70 61 63 65 2c 20 61 73 20 77 65 6c 6c  mespace, as well
77b0: 20 61 73 20 61 64 64 69 74 69 6f 6e 61 6c 20 73   as additional s
77c0: 70 65 63 69 66 69 63 20 6e 61 6d 65 73 70 61 63  pecific namespac
77d0: 65 73 20 66 6f 72 20 74 68 65 20 22 64 63 22 20  es for the "dc" 
77e0: 6e 61 6d 65 73 70 61 63 65 2e 20 49 74 20 61 6c  namespace. It al
77f0: 73 6f 20 64 65 6d 6f 6e 73 74 72 61 74 65 73 20  so demonstrates 
7800: 68 6f 77 20 79 6f 75 20 63 61 6e 20 67 65 74 20  how you can get 
7810: 74 68 65 20 3c 3f 78 6d 6c 3f 3e 20 64 65 63 6c  the <?xml?> decl
7820: 61 72 61 74 69 6f 6e 20 77 68 69 63 68 20 64 6f  aration which do
7830: 65 73 20 6e 6f 74 20 61 70 70 65 61 72 20 69 6e  es not appear in
7840: 20 61 20 73 69 6d 70 6c 65 20 2e 54 6f 53 74 72   a simple .ToStr
7850: 69 6e 67 28 29 2e 0d 0a 23 0d 0a 23 20 4e 4f 54  ing()...#..# NOT
7860: 45 20 74 68 61 74 20 74 68 65 20 62 61 63 6b 74  E that the backt
7870: 69 63 6b 20 69 6e 20 74 68 65 20 68 74 74 70 60  ick in the http`
7880: 3a 20 69 6e 20 74 68 65 20 55 52 4c 73 20 69 6e  : in the URLs in
7890: 20 74 68 65 20 69 6e 70 75 74 20 69 73 20 75 6e   the input is un
78a0: 65 63 65 73 73 61 72 79 2c 20 61 6e 64 20 49 20  ecessary, and I 
78b0: 61 64 64 65 64 20 74 68 65 20 73 70 61 63 65 20  added the space 
78c0: 61 66 74 65 72 20 74 68 65 20 68 74 74 70 3a 20  after the http: 
78d0: 69 6e 20 74 68 65 20 55 52 4c 73 20 20 69 6e 20  in the URLs  in 
78e0: 74 68 65 20 6f 75 74 70 75 74 20 2d 2d 20 74 68  the output -- th
78f0: 65 73 65 20 61 72 65 20 61 63 63 6f 6d 6f 64 61  ese are accomoda
7900: 74 69 6f 6e 73 20 74 6f 20 50 6f 73 68 43 6f 64  tions to PoshCod
7910: 65 27 73 20 73 70 61 6d 20 66 69 6c 74 65 72 2e  e's spam filter.
7920: 20 42 61 63 6b 74 69 63 6b 73 20 61 72 65 20 6e   Backticks are n
7930: 6f 74 20 6e 65 65 64 20 69 6e 20 74 68 65 20 69  ot need in the i
7940: 6e 70 75 74 2c 20 61 6e 64 20 73 70 61 63 65 73  nput, and spaces
7950: 20 64 6f 20 6e 6f 74 20 61 70 70 65 61 72 20 69   do not appear i
7960: 6e 20 74 68 65 20 61 63 74 75 61 6c 20 6f 75 74  n the actual out
7970: 70 75 74 2e 23 0d 0a 23 20 0d 0a 5b 43 6d 64 6c  put.#..# ..[Cmdl
7980: 65 74 42 69 6e 64 69 6e 67 28 29 5d 0d 0a 50 61  etBinding()]..Pa
7990: 72 61 6d 28 0d 0a 20 20 20 5b 50 61 72 61 6d 65  ram(..   [Parame
79a0: 74 65 72 28 4d 61 6e 64 61 74 6f 72 79 20 3d 20  ter(Mandatory = 
79b0: 24 74 72 75 65 2c 20 50 6f 73 69 74 69 6f 6e 20  $true, Position 
79c0: 3d 20 30 29 5d 0d 0a 20 20 20 5b 53 79 73 74 65  = 0)]..   [Syste
79d0: 6d 2e 58 6d 6c 2e 4c 69 6e 71 2e 58 4e 61 6d 65  m.Xml.Linq.XName
79e0: 5d 24 72 6f 6f 74 0d 0a 2c 0d 0a 20 20 20 5b 50  ]$root..,..   [P
79f0: 61 72 61 6d 65 74 65 72 28 4d 61 6e 64 61 74 6f  arameter(Mandato
7a00: 72 79 20 3d 20 24 66 61 6c 73 65 29 5d 0d 0a 20  ry = $false)].. 
7a10: 20 20 5b 73 74 72 69 6e 67 5d 24 56 65 72 73 69    [string]$Versi
7a20: 6f 6e 20 3d 20 22 31 2e 30 22 0d 0a 2c 0d 0a 20  on = "1.0"..,.. 
7a30: 20 20 5b 50 61 72 61 6d 65 74 65 72 28 4d 61 6e    [Parameter(Man
7a40: 64 61 74 6f 72 79 20 3d 20 24 66 61 6c 73 65 29  datory = $false)
7a50: 5d 0d 0a 20 20 20 5b 73 74 72 69 6e 67 5d 24 45  ]..   [string]$E
7a60: 6e 63 6f 64 69 6e 67 20 3d 20 22 55 54 46 2d 38  ncoding = "UTF-8
7a70: 22 0d 0a 2c 0d 0a 20 20 20 5b 50 61 72 61 6d 65  "..,..   [Parame
7a80: 74 65 72 28 4d 61 6e 64 61 74 6f 72 79 20 3d 20  ter(Mandatory = 
7a90: 24 66 61 6c 73 65 29 5d 0d 0a 20 20 20 5b 73 74  $false)]..   [st
7aa0: 72 69 6e 67 5d 24 53 74 61 6e 64 61 6c 6f 6e 65  ring]$Standalone
7ab0: 20 3d 20 22 79 65 73 22 0d 0a 2c 0d 0a 20 20 20   = "yes"..,..   
7ac0: 5b 41 6c 6c 6f 77 4e 75 6c 6c 28 29 5d 5b 41 6c  [AllowNull()][Al
7ad0: 6c 6f 77 45 6d 70 74 79 53 74 72 69 6e 67 28 29  lowEmptyString()
7ae0: 5d 5b 41 6c 6c 6f 77 45 6d 70 74 79 43 6f 6c 6c  ][AllowEmptyColl
7af0: 65 63 74 69 6f 6e 28 29 5d 0d 0a 20 20 20 5b 50  ection()]..   [P
7b00: 61 72 61 6d 65 74 65 72 28 50 6f 73 69 74 69 6f  arameter(Positio
7b10: 6e 3d 39 39 2c 20 4d 61 6e 64 61 74 6f 72 79 20  n=99, Mandatory 
7b20: 3d 20 24 66 61 6c 73 65 2c 20 56 61 6c 75 65 46  = $false, ValueF
7b30: 72 6f 6d 52 65 6d 61 69 6e 69 6e 67 41 72 67 75  romRemainingArgu
7b40: 6d 65 6e 74 73 3d 24 74 72 75 65 29 5d 0d 0a 20  ments=$true)].. 
7b50: 20 20 5b 50 53 4f 62 6a 65 63 74 5b 5d 5d 24 61    [PSObject[]]$a
7b60: 72 67 73 0d 0a 29 0d 0a 42 45 47 49 4e 20 7b 0d  rgs..)..BEGIN {.
7b70: 0a 20 20 20 24 73 63 72 69 70 74 3a 4e 61 6d 65  .   $script:Name
7b80: 53 70 61 63 65 48 61 73 68 20 3d 20 4e 65 77 2d  SpaceHash = New-
7b90: 4f 62 6a 65 63 74 20 27 44 69 63 74 69 6f 6e 61  Object 'Dictiona
7ba0: 72 79 5b 53 74 72 69 6e 67 2c 58 4e 61 6d 65 73  ry[String,XNames
7bb0: 70 61 63 65 5d 27 0d 0a 20 20 20 69 66 28 24 72  pace]'..   if($r
7bc0: 6f 6f 74 2e 4e 61 6d 65 73 70 61 63 65 4e 61 6d  oot.NamespaceNam
7bd0: 65 29 20 7b 0d 0a 20 20 20 20 20 20 24 73 63 72  e) {..      $scr
7be0: 69 70 74 3a 4e 61 6d 65 53 70 61 63 65 48 61 73  ipt:NameSpaceHas
7bf0: 68 2e 41 64 64 28 22 22 2c 20 24 72 6f 6f 74 2e  h.Add("", $root.
7c00: 4e 61 6d 65 73 70 61 63 65 29 0d 0a 20 20 20 7d  Namespace)..   }
7c10: 0d 0a 7d 0d 0a 50 52 4f 43 45 53 53 20 7b 0d 0a  ..}..PROCESS {..
7c20: 20 20 20 4e 65 77 2d 4f 62 6a 65 63 74 20 58 44     New-Object XD
7c30: 6f 63 75 6d 65 6e 74 20 28 4e 65 77 2d 4f 62 6a  ocument (New-Obj
7c40: 65 63 74 20 58 44 65 63 6c 61 72 61 74 69 6f 6e  ect XDeclaration
7c50: 20 24 56 65 72 73 69 6f 6e 2c 20 24 45 6e 63 6f   $Version, $Enco
7c60: 64 69 6e 67 2c 20 24 73 74 61 6e 64 61 6c 6f 6e  ding, $standalon
7c70: 65 29 2c 28 0d 0a 20 20 20 20 20 20 4e 65 77 2d  e),(..      New-
7c80: 4f 62 6a 65 63 74 20 58 45 6c 65 6d 65 6e 74 20  Object XElement 
7c90: 24 28 0d 0a 20 20 20 20 20 20 20 20 20 24 72 6f  $(..         $ro
7ca0: 6f 74 0d 0a 20 20 20 20 20 20 20 20 20 77 68 69  ot..         whi
7cb0: 6c 65 28 24 61 72 67 73 29 20 7b 0d 0a 20 20 20  le($args) {..   
7cc0: 20 20 20 20 20 20 20 20 20 24 61 74 74 72 69 62           $attrib
7cd0: 2c 20 24 76 61 6c 75 65 2c 20 24 61 72 67 73 20  , $value, $args 
7ce0: 3d 20 24 61 72 67 73 0d 0a 20 20 20 20 20 20 20  = $args..       
7cf0: 20 20 20 20 20 69 66 28 24 61 74 74 72 69 62 20       if($attrib 
7d00: 2d 69 73 20 5b 53 63 72 69 70 74 42 6c 6f 63 6b  -is [ScriptBlock
7d10: 5d 29 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20  ]) {..          
7d20: 20 20 20 20 20 23 20 57 72 69 74 65 2d 56 65 72       # Write-Ver
7d30: 62 6f 73 65 20 22 50 72 65 70 61 72 73 65 64 20  bose "Preparsed 
7d40: 44 53 4c 3a 20 24 61 74 74 72 69 62 22 0d 0a 20  DSL: $attrib".. 
7d50: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 24 61                $a
7d60: 74 74 72 69 62 20 3d 20 43 6f 6e 76 65 72 74 46  ttrib = ConvertF
7d70: 72 6f 6d 2d 58 6d 6c 44 73 6c 20 24 61 74 74 72  rom-XmlDsl $attr
7d80: 69 62 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ib..            
7d90: 20 20 20 57 72 69 74 65 2d 56 65 72 62 6f 73 65     Write-Verbose
7da0: 20 22 52 65 70 61 72 73 65 64 20 44 53 4c 3a 20   "Reparsed DSL: 
7db0: 24 61 74 74 72 69 62 22 0d 0a 20 20 20 20 20 20  $attrib"..      
7dc0: 20 20 20 20 20 20 20 20 20 26 24 61 74 74 72 69           &$attri
7dd0: 62 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d  b..            }
7de0: 20 65 6c 73 65 69 66 20 28 20 24 76 61 6c 75 65   elseif ( $value
7df0: 20 2d 69 73 20 5b 53 63 72 69 70 74 42 6c 6f 63   -is [ScriptBloc
7e00: 6b 5d 20 2d 61 6e 64 20 22 2d 43 4f 4e 54 45 4e  k] -and "-CONTEN
7e10: 54 22 2e 53 74 61 72 74 73 57 69 74 68 28 24 61  T".StartsWith($a
7e20: 74 74 72 69 62 2e 54 72 69 6d 45 6e 64 28 27 3a  ttrib.TrimEnd(':
7e30: 27 29 2e 54 6f 55 70 70 65 72 28 29 29 29 20 7b  ').ToUpper())) {
7e40: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
7e50: 20 24 76 61 6c 75 65 20 3d 20 43 6f 6e 76 65 72   $value = Conver
7e60: 74 46 72 6f 6d 2d 58 6d 6c 44 73 6c 20 24 76 61  tFrom-XmlDsl $va
7e70: 6c 75 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20  lue..           
7e80: 20 20 20 20 26 24 76 61 6c 75 65 0d 0a 20 20 20      &$value..   
7e90: 20 20 20 20 20 20 20 20 20 7d 20 65 6c 73 65 69           } elsei
7ea0: 66 20 28 20 24 76 61 6c 75 65 20 2d 69 73 20 5b  f ( $value -is [
7eb0: 58 4e 61 6d 65 73 70 61 63 65 5d 29 20 7b 0d 0a  XNamespace]) {..
7ec0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 4e                 N
7ed0: 65 77 2d 4f 62 6a 65 63 74 20 58 41 74 74 72 69  ew-Object XAttri
7ee0: 62 75 74 65 20 28 5b 58 4e 61 6d 65 73 70 61 63  bute ([XNamespac
7ef0: 65 5d 3a 3a 58 6d 6c 6e 73 20 2b 20 24 61 74 74  e]::Xmlns + $att
7f00: 72 69 62 2e 54 72 69 6d 53 74 61 72 74 28 22 2d  rib.TrimStart("-
7f10: 22 29 2e 54 72 69 6d 45 6e 64 28 27 3a 27 29 29  ").TrimEnd(':'))
7f20: 2c 20 24 76 61 6c 75 65 0d 0a 20 20 20 20 20 20  , $value..      
7f30: 20 20 20 20 20 20 20 20 20 24 73 63 72 69 70 74           $script
7f40: 3a 4e 61 6d 65 53 70 61 63 65 48 61 73 68 2e 41  :NameSpaceHash.A
7f50: 64 64 28 24 61 74 74 72 69 62 2e 54 72 69 6d 53  dd($attrib.TrimS
7f60: 74 61 72 74 28 22 2d 22 29 2e 54 72 69 6d 45 6e  tart("-").TrimEn
7f70: 64 28 27 3a 27 29 2c 20 24 76 61 6c 75 65 29 0d  d(':'), $value).
7f80: 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 20 65  .            } e
7f90: 6c 73 65 20 7b 0d 0a 20 20 20 20 20 20 20 20 20  lse {..         
7fa0: 20 20 20 20 20 20 57 72 69 74 65 2d 56 65 72 62        Write-Verb
7fb0: 6f 73 65 20 22 58 41 74 74 72 69 62 75 74 65 20  ose "XAttribute 
7fc0: 24 61 74 74 72 69 62 20 3d 20 24 76 61 6c 75 65  $attrib = $value
7fd0: 22 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  "..             
7fe0: 20 20 4e 65 77 2d 4f 62 6a 65 63 74 20 58 41 74    New-Object XAt
7ff0: 74 72 69 62 75 74 65 20 24 61 74 74 72 69 62 2e  tribute $attrib.
8000: 54 72 69 6d 53 74 61 72 74 28 22 2d 22 29 2e 54  TrimStart("-").T
8010: 72 69 6d 45 6e 64 28 27 3a 27 29 2c 20 24 76 61  rimEnd(':'), $va
8020: 6c 75 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20  lue..           
8030: 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 7d 0d 0a   }..         }..
8040: 20 20 20 20 20 20 29 29 0d 0a 7d 0d 0a 7d 0d 0a        ))..}..}..
8050: 0d 0a 53 65 74 2d 41 6c 69 61 73 20 78 6d 6c 20  ..Set-Alias xml 
8060: 4e 65 77 2d 58 44 6f 63 75 6d 65 6e 74 20 2d 45  New-XDocument -E
8070: 41 20 30 0d 0a 53 65 74 2d 41 6c 69 61 73 20 4e  A 0..Set-Alias N
8080: 65 77 2d 58 6d 6c 20 4e 65 77 2d 58 44 6f 63 75  ew-Xml New-XDocu
8090: 6d 65 6e 74 20 2d 45 41 20 30 0d 0a 0d 0a 66 75  ment -EA 0....fu
80a0: 6e 63 74 69 6f 6e 20 4e 65 77 2d 58 41 74 74 72  nction New-XAttr
80b0: 69 62 75 74 65 20 7b 0d 0a 23 2e 53 79 6e 6f 70  ibute {..#.Synop
80c0: 73 79 73 0d 0a 23 20 20 20 43 72 65 61 74 65 73  sys..#   Creates
80d0: 20 61 20 6e 65 77 20 58 41 74 74 72 69 62 75 74   a new XAttribut
80e0: 65 20 28 61 6e 20 78 6d 6c 20 61 74 74 72 69 62  e (an xml attrib
80f0: 75 74 65 20 6f 6e 20 61 6e 20 58 45 6c 65 6d 65  ute on an XEleme
8100: 6e 74 20 66 6f 72 20 58 44 6f 63 75 6d 65 6e 74  nt for XDocument
8110: 29 0d 0a 23 2e 44 65 73 63 72 69 70 74 69 6f 6e  )..#.Description
8120: 0d 0a 23 20 20 54 68 69 73 20 69 73 20 74 68 65  ..#  This is the
8130: 20 77 6f 72 6b 2d 68 6f 72 73 65 20 66 6f 72 20   work-horse for 
8140: 74 68 65 20 58 4d 4c 20 6d 69 6e 69 2d 64 73 6c  the XML mini-dsl
8150: 0d 0a 23 2e 50 61 72 61 6d 65 74 65 72 20 6e 61  ..#.Parameter na
8160: 6d 65 0d 0a 23 20 20 20 54 68 65 20 61 74 74 72  me..#   The attr
8170: 69 62 75 74 65 20 6e 61 6d 65 0d 0a 23 2e 50 61  ibute name..#.Pa
8180: 72 61 6d 65 74 65 72 20 76 61 6c 75 65 0d 0a 23  rameter value..#
8190: 20 20 54 68 65 20 61 74 74 72 69 62 75 74 65 20    The attribute 
81a0: 76 61 6c 75 65 0d 0a 5b 43 6d 64 6c 65 74 42 69  value..[CmdletBi
81b0: 6e 64 69 6e 67 28 29 5d 0d 0a 50 61 72 61 6d 28  nding()]..Param(
81c0: 5b 50 61 72 61 6d 65 74 65 72 28 4d 61 6e 64 61  [Parameter(Manda
81d0: 74 6f 72 79 3d 24 74 72 75 65 29 5d 24 6e 61 6d  tory=$true)]$nam
81e0: 65 2c 5b 50 61 72 61 6d 65 74 65 72 28 4d 61 6e  e,[Parameter(Man
81f0: 64 61 74 6f 72 79 3d 24 74 72 75 65 29 5d 24 76  datory=$true)]$v
8200: 61 6c 75 65 29 0d 0a 20 20 20 4e 65 77 2d 4f 62  alue)..   New-Ob
8210: 6a 65 63 74 20 58 41 74 74 72 69 62 75 74 65 20  ject XAttribute 
8220: 24 6e 61 6d 65 2c 20 24 76 61 6c 75 65 0d 0a 7d  $name, $value..}
8230: 0d 0a 53 65 74 2d 41 6c 69 61 73 20 78 61 20 4e  ..Set-Alias xa N
8240: 65 77 2d 58 41 74 74 72 69 62 75 74 65 20 2d 45  ew-XAttribute -E
8250: 41 20 30 0d 0a 53 65 74 2d 41 6c 69 61 73 20 4e  A 0..Set-Alias N
8260: 65 77 2d 58 6d 6c 41 74 74 72 69 62 75 74 65 20  ew-XmlAttribute 
8270: 4e 65 77 2d 58 41 74 74 72 69 62 75 74 65 20 2d  New-XAttribute -
8280: 45 41 20 30 0d 0a 0d 0a 0d 0a 66 75 6e 63 74 69  EA 0......functi
8290: 6f 6e 20 4e 65 77 2d 58 45 6c 65 6d 65 6e 74 20  on New-XElement 
82a0: 7b 0d 0a 23 2e 53 79 6e 6f 70 73 79 73 0d 0a 23  {..#.Synopsys..#
82b0: 20 20 20 43 72 65 61 74 65 73 20 61 20 6e 65 77     Creates a new
82c0: 20 58 45 6c 65 6d 65 6e 74 20 28 61 6e 20 78 6d   XElement (an xm
82d0: 6c 20 74 61 67 20 66 6f 72 20 58 44 6f 63 75 6d  l tag for XDocum
82e0: 65 6e 74 29 0d 0a 23 2e 44 65 73 63 72 69 70 74  ent)..#.Descript
82f0: 69 6f 6e 0d 0a 23 20 20 54 68 69 73 20 69 73 20  ion..#  This is 
8300: 74 68 65 20 77 6f 72 6b 2d 68 6f 72 73 65 20 66  the work-horse f
8310: 6f 72 20 74 68 65 20 58 4d 4c 20 6d 69 6e 69 2d  or the XML mini-
8320: 64 73 6c 0d 0a 23 2e 50 61 72 61 6d 65 74 65 72  dsl..#.Parameter
8330: 20 74 61 67 0d 0a 23 20 20 20 54 68 65 20 6e 61   tag..#   The na
8340: 6d 65 20 6f 66 20 74 68 65 20 78 6d 6c 20 74 61  me of the xml ta
8350: 67 0d 0a 23 2e 50 61 72 61 6d 65 74 65 72 20 61  g..#.Parameter a
8360: 72 67 73 0d 0a 23 20 20 20 74 68 69 73 20 69 73  rgs..#   this is
8370: 20 77 68 65 72 65 20 61 6c 6c 20 74 68 65 20 64   where all the d
8380: 73 6c 20 6d 61 67 69 63 20 68 61 70 70 65 6e 73  sl magic happens
8390: 2e 20 50 6c 65 61 73 65 20 73 65 65 20 74 68 65  . Please see the
83a0: 20 45 78 61 6d 70 6c 65 73 2e 20 3a 29 0d 0a 5b   Examples. :)..[
83b0: 43 6d 64 6c 65 74 42 69 6e 64 69 6e 67 28 29 5d  CmdletBinding()]
83c0: 0d 0a 50 61 72 61 6d 28 0d 0a 20 20 20 5b 50 61  ..Param(..   [Pa
83d0: 72 61 6d 65 74 65 72 28 4d 61 6e 64 61 74 6f 72  rameter(Mandator
83e0: 79 20 3d 20 24 74 72 75 65 2c 20 50 6f 73 69 74  y = $true, Posit
83f0: 69 6f 6e 20 3d 20 30 29 5d 0d 0a 20 20 20 5b 53  ion = 0)]..   [S
8400: 79 73 74 65 6d 2e 58 6d 6c 2e 4c 69 6e 71 2e 58  ystem.Xml.Linq.X
8410: 4e 61 6d 65 5d 24 74 61 67 0d 0a 2c 0d 0a 20 20  Name]$tag..,..  
8420: 20 5b 41 6c 6c 6f 77 4e 75 6c 6c 28 29 5d 5b 41   [AllowNull()][A
8430: 6c 6c 6f 77 45 6d 70 74 79 53 74 72 69 6e 67 28  llowEmptyString(
8440: 29 5d 5b 41 6c 6c 6f 77 45 6d 70 74 79 43 6f 6c  )][AllowEmptyCol
8450: 6c 65 63 74 69 6f 6e 28 29 5d 0d 0a 20 20 20 5b  lection()]..   [
8460: 50 61 72 61 6d 65 74 65 72 28 50 6f 73 69 74 69  Parameter(Positi
8470: 6f 6e 3d 39 39 2c 20 4d 61 6e 64 61 74 6f 72 79  on=99, Mandatory
8480: 20 3d 20 24 66 61 6c 73 65 2c 20 56 61 6c 75 65   = $false, Value
8490: 46 72 6f 6d 52 65 6d 61 69 6e 69 6e 67 41 72 67  FromRemainingArg
84a0: 75 6d 65 6e 74 73 3d 24 74 72 75 65 29 5d 0d 0a  uments=$true)]..
84b0: 20 20 20 5b 50 53 4f 62 6a 65 63 74 5b 5d 5d 24     [PSObject[]]$
84c0: 61 72 67 73 0d 0a 29 0d 0a 50 52 4f 43 45 53 53  args..)..PROCESS
84d0: 20 7b 0d 0a 20 20 4e 65 77 2d 4f 62 6a 65 63 74   {..  New-Object
84e0: 20 58 45 6c 65 6d 65 6e 74 20 24 28 0d 0a 20 20   XElement $(..  
84f0: 20 20 20 24 74 61 67 0d 0a 20 20 20 20 20 77 68     $tag..     wh
8500: 69 6c 65 28 24 61 72 67 73 29 20 7b 0d 0a 20 20  ile($args) {..  
8510: 20 20 20 20 20 20 24 61 74 74 72 69 62 2c 20 24        $attrib, $
8520: 76 61 6c 75 65 2c 20 24 61 72 67 73 20 3d 20 24  value, $args = $
8530: 61 72 67 73 0d 0a 20 20 20 20 20 20 20 20 69 66  args..        if
8540: 28 24 61 74 74 72 69 62 20 2d 69 73 20 5b 53 63  ($attrib -is [Sc
8550: 72 69 70 74 42 6c 6f 63 6b 5d 29 20 7b 20 23 20  riptBlock]) { # 
8560: 74 68 65 6e 20 69 74 27 73 20 63 6f 6e 74 65 6e  then it's conten
8570: 74 0d 0a 20 20 20 20 20 20 20 20 20 20 20 26 24  t..           &$
8580: 61 74 74 72 69 62 0d 0a 20 20 20 20 20 20 20 20  attrib..        
8590: 7d 20 65 6c 73 65 69 66 20 28 20 24 76 61 6c 75  } elseif ( $valu
85a0: 65 20 2d 69 73 20 5b 53 63 72 69 70 74 42 6c 6f  e -is [ScriptBlo
85b0: 63 6b 5d 20 2d 61 6e 64 20 22 2d 43 4f 4e 54 45  ck] -and "-CONTE
85c0: 4e 54 22 2e 53 74 61 72 74 73 57 69 74 68 28 24  NT".StartsWith($
85d0: 61 74 74 72 69 62 2e 54 72 69 6d 45 6e 64 28 27  attrib.TrimEnd('
85e0: 3a 27 29 2e 54 6f 55 70 70 65 72 28 29 29 29 20  :').ToUpper())) 
85f0: 7b 20 23 20 74 68 65 6e 20 69 74 27 73 20 63 6f  { # then it's co
8600: 6e 74 65 6e 74 0d 0a 20 20 20 20 20 20 20 20 20  ntent..         
8610: 20 20 26 24 76 61 6c 75 65 0d 0a 20 20 20 20 20    &$value..     
8620: 20 20 20 7d 20 65 6c 73 65 69 66 20 28 20 24 76     } elseif ( $v
8630: 61 6c 75 65 20 2d 69 73 20 5b 58 4e 61 6d 65 73  alue -is [XNames
8640: 70 61 63 65 5d 29 20 7b 0d 0a 20 20 20 20 20 20  pace]) {..      
8650: 20 20 20 20 20 4e 65 77 2d 4f 62 6a 65 63 74 20       New-Object 
8660: 58 41 74 74 72 69 62 75 74 65 20 28 5b 58 4e 61  XAttribute ([XNa
8670: 6d 65 73 70 61 63 65 5d 3a 3a 58 6d 6c 6e 73 20  mespace]::Xmlns 
8680: 2b 20 24 61 74 74 72 69 62 2e 54 72 69 6d 53 74  + $attrib.TrimSt
8690: 61 72 74 28 22 2d 22 29 2e 54 72 69 6d 45 6e 64  art("-").TrimEnd
86a0: 28 27 3a 27 29 29 2c 20 24 76 61 6c 75 65 0d 0a  (':')), $value..
86b0: 20 20 20 20 20 20 20 20 20 20 20 24 73 63 72 69             $scri
86c0: 70 74 3a 4e 61 6d 65 53 70 61 63 65 48 61 73 68  pt:NameSpaceHash
86d0: 2e 41 64 64 28 24 61 74 74 72 69 62 2e 54 72 69  .Add($attrib.Tri
86e0: 6d 53 74 61 72 74 28 22 2d 22 29 2e 54 72 69 6d  mStart("-").Trim
86f0: 45 6e 64 28 27 3a 27 29 2c 20 24 76 61 6c 75 65  End(':'), $value
8700: 29 0d 0a 20 20 20 20 20 20 20 20 7d 20 65 6c 73  )..        } els
8710: 65 69 66 28 24 76 61 6c 75 65 20 2d 6d 61 74 63  eif($value -matc
8720: 68 20 22 2d 28 3f 21 5c 64 29 5c 77 22 29 20 7b  h "-(?!\d)\w") {
8730: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 24 61  ..            $a
8740: 72 67 73 20 3d 20 40 28 24 76 61 6c 75 65 29 2b  rgs = @($value)+
8750: 40 28 24 61 72 67 73 29 0d 0a 20 20 20 20 20 20  @($args)..      
8760: 20 20 7d 20 65 6c 73 65 69 66 28 24 76 61 6c 75    } elseif($valu
8770: 65 20 2d 6e 65 20 24 6e 75 6c 6c 29 20 7b 0d 0a  e -ne $null) {..
8780: 20 20 20 20 20 20 20 20 20 20 20 4e 65 77 2d 4f             New-O
8790: 62 6a 65 63 74 20 58 41 74 74 72 69 62 75 74 65  bject XAttribute
87a0: 20 24 61 74 74 72 69 62 2e 54 72 69 6d 53 74 61   $attrib.TrimSta
87b0: 72 74 28 22 2d 22 29 2e 54 72 69 6d 45 6e 64 28  rt("-").TrimEnd(
87c0: 27 3a 27 29 2c 20 24 76 61 6c 75 65 0d 0a 20 20  ':'), $value..  
87d0: 20 20 20 20 20 20 7d 20 20 20 20 20 20 20 20 0d        }        .
87e0: 0a 20 20 20 20 20 20 20 20 0d 0a 20 20 20 20 20  .        ..     
87f0: 7d 0d 0a 20 20 20 29 0d 0a 7d 0d 0a 7d 0d 0a 53  }..   )..}..}..S
8800: 65 74 2d 41 6c 69 61 73 20 78 65 20 4e 65 77 2d  et-Alias xe New-
8810: 58 45 6c 65 6d 65 6e 74 0d 0a 53 65 74 2d 41 6c  XElement..Set-Al
8820: 69 61 73 20 4e 65 77 2d 58 6d 6c 45 6c 65 6d 65  ias New-XmlEleme
8830: 6e 74 20 4e 65 77 2d 58 45 6c 65 6d 65 6e 74 0d  nt New-XElement.
8840: 0a 0d 0a 66 75 6e 63 74 69 6f 6e 20 43 6f 6e 76  ...function Conv
8850: 65 72 74 46 72 6f 6d 2d 58 6d 6c 44 73 6c 20 7b  ertFrom-XmlDsl {
8860: 0d 0a 50 61 72 61 6d 28 5b 53 63 72 69 70 74 42  ..Param([ScriptB
8870: 6c 6f 63 6b 5d 24 73 63 72 69 70 74 29 0d 0a 20  lock]$script).. 
8880: 20 20 24 70 61 72 73 65 72 72 6f 72 73 20 3d 20    $parserrors = 
8890: 24 6e 75 6c 6c 0d 0a 20 20 20 24 67 6c 6f 62 61  $null..   $globa
88a0: 6c 3a 74 6f 6b 65 6e 73 20 3d 20 5b 50 53 50 61  l:tokens = [PSPa
88b0: 72 73 65 72 5d 3a 3a 54 6f 6b 65 6e 69 7a 65 28  rser]::Tokenize(
88c0: 20 24 73 63 72 69 70 74 2c 20 5b 72 65 66 5d 24   $script, [ref]$
88d0: 70 61 72 73 65 72 72 6f 72 73 20 29 0d 0a 20 20  parserrors )..  
88e0: 20 5b 41 72 72 61 79 5d 24 64 75 64 73 20 3d 20   [Array]$duds = 
88f0: 24 67 6c 6f 62 61 6c 3a 74 6f 6b 65 6e 73 20 7c  $global:tokens |
8900: 20 57 68 65 72 65 2d 4f 62 6a 65 63 74 20 7b 20   Where-Object { 
8910: 24 5f 2e 54 79 70 65 20 2d 65 71 20 22 43 6f 6d  $_.Type -eq "Com
8920: 6d 61 6e 64 22 20 2d 61 6e 64 20 21 24 5f 2e 43  mand" -and !$_.C
8930: 6f 6e 74 65 6e 74 2e 43 6f 6e 74 61 69 6e 73 28  ontent.Contains(
8940: 27 2d 27 29 20 2d 61 6e 64 20 28 24 28 47 65 74  '-') -and ($(Get
8950: 2d 43 6f 6d 6d 61 6e 64 20 24 5f 2e 43 6f 6e 74  -Command $_.Cont
8960: 65 6e 74 20 2d 54 79 70 65 20 43 6d 64 6c 65 74  ent -Type Cmdlet
8970: 2c 46 75 6e 63 74 69 6f 6e 2c 45 78 74 65 72 6e  ,Function,Extern
8980: 61 6c 53 63 72 69 70 74 20 2d 45 41 20 30 29 20  alScript -EA 0) 
8990: 2d 65 71 20 24 4e 75 6c 6c 29 20 7d 0d 0a 20 20  -eq $Null) }..  
89a0: 20 5b 41 72 72 61 79 5d 3a 3a 52 65 76 65 72 73   [Array]::Revers
89b0: 65 28 20 24 64 75 64 73 20 29 0d 0a 20 20 20 0d  e( $duds )..   .
89c0: 0a 20 20 20 5b 73 74 72 69 6e 67 5b 5d 5d 24 53  .   [string[]]$S
89d0: 63 72 69 70 74 54 65 78 74 20 3d 20 22 24 73 63  criptText = "$sc
89e0: 72 69 70 74 22 20 2d 73 70 6c 69 74 20 22 60 6e  ript" -split "`n
89f0: 22 0d 0a 0d 0a 20 20 20 46 6f 72 45 61 63 68 28  "....   ForEach(
8a00: 24 74 6f 6b 65 6e 20 69 6e 20 24 64 75 64 73 20  $token in $duds 
8a10: 29 20 7b 0d 0a 20 20 20 20 20 20 23 20 72 65 70  ) {..      # rep
8a20: 6c 61 63 65 20 3a 20 6e 6f 74 61 74 69 6f 6e 20  lace : notation 
8a30: 77 69 74 68 20 6e 61 6d 65 73 70 61 63 65 20 6e  with namespace n
8a40: 6f 74 61 74 69 6f 6e 0d 0a 20 20 20 20 20 20 69  otation..      i
8a50: 66 28 20 24 74 6f 6b 65 6e 2e 43 6f 6e 74 65 6e  f( $token.Conten
8a60: 74 2e 43 6f 6e 74 61 69 6e 73 28 22 3a 22 29 20  t.Contains(":") 
8a70: 29 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 24 6b  ) {..         $k
8a80: 65 79 2c 20 24 6c 6f 63 61 6c 6e 61 6d 65 20 3d  ey, $localname =
8a90: 20 24 74 6f 6b 65 6e 2e 43 6f 6e 74 65 6e 74 20   $token.Content 
8aa0: 2d 73 70 6c 69 74 20 22 3a 22 0d 0a 20 20 20 20  -split ":"..    
8ab0: 20 20 20 20 20 24 53 63 72 69 70 74 54 65 78 74       $ScriptText
8ac0: 5b 28 24 74 6f 6b 65 6e 2e 53 74 61 72 74 4c 69  [($token.StartLi
8ad0: 6e 65 20 2d 20 31 29 5d 20 3d 20 24 53 63 72 69  ne - 1)] = $Scri
8ae0: 70 74 54 65 78 74 5b 28 24 74 6f 6b 65 6e 2e 53  ptText[($token.S
8af0: 74 61 72 74 4c 69 6e 65 20 2d 20 31 29 5d 2e 52  tartLine - 1)].R
8b00: 65 6d 6f 76 65 28 20 24 74 6f 6b 65 6e 2e 53 74  emove( $token.St
8b10: 61 72 74 43 6f 6c 75 6d 6e 20 2d 31 2c 20 24 74  artColumn -1, $t
8b20: 6f 6b 65 6e 2e 4c 65 6e 67 74 68 20 29 2e 49 6e  oken.Length ).In
8b30: 73 65 72 74 28 20 24 74 6f 6b 65 6e 2e 53 74 61  sert( $token.Sta
8b40: 72 74 43 6f 6c 75 6d 6e 20 2d 31 2c 20 22 27 22  rtColumn -1, "'"
8b50: 20 2b 20 24 28 24 73 63 72 69 70 74 3a 4e 61 6d   + $($script:Nam
8b60: 65 53 70 61 63 65 48 61 73 68 5b 24 6b 65 79 5d  eSpaceHash[$key]
8b70: 20 2b 20 24 6c 6f 63 61 6c 6e 61 6d 65 29 20 2b   + $localname) +
8b80: 20 22 27 22 20 29 0d 0a 20 20 20 20 20 20 7d 20   "'" )..      } 
8b90: 65 6c 73 65 20 7b 0d 0a 20 20 20 20 20 20 20 20  else {..        
8ba0: 20 24 53 63 72 69 70 74 54 65 78 74 5b 28 24 74   $ScriptText[($t
8bb0: 6f 6b 65 6e 2e 53 74 61 72 74 4c 69 6e 65 20 2d  oken.StartLine -
8bc0: 20 31 29 5d 20 3d 20 24 53 63 72 69 70 74 54 65   1)] = $ScriptTe
8bd0: 78 74 5b 28 24 74 6f 6b 65 6e 2e 53 74 61 72 74  xt[($token.Start
8be0: 4c 69 6e 65 20 2d 20 31 29 5d 2e 52 65 6d 6f 76  Line - 1)].Remov
8bf0: 65 28 20 24 74 6f 6b 65 6e 2e 53 74 61 72 74 43  e( $token.StartC
8c00: 6f 6c 75 6d 6e 20 2d 31 2c 20 24 74 6f 6b 65 6e  olumn -1, $token
8c10: 2e 4c 65 6e 67 74 68 20 29 2e 49 6e 73 65 72 74  .Length ).Insert
8c20: 28 20 24 74 6f 6b 65 6e 2e 53 74 61 72 74 43 6f  ( $token.StartCo
8c30: 6c 75 6d 6e 20 2d 31 2c 20 22 27 22 20 2b 20 24  lumn -1, "'" + $
8c40: 28 24 73 63 72 69 70 74 3a 4e 61 6d 65 53 70 61  ($script:NameSpa
8c50: 63 65 48 61 73 68 5b 27 27 5d 20 2b 20 24 74 6f  ceHash[''] + $to
8c60: 6b 65 6e 2e 43 6f 6e 74 65 6e 74 29 20 2b 20 22  ken.Content) + "
8c70: 27 22 20 29 0d 0a 20 20 20 20 20 20 7d 0d 0a 20  '" )..      }.. 
8c80: 20 20 20 20 20 23 20 69 6e 73 65 72 74 20 27 78       # insert 'x
8c90: 65 27 20 62 65 66 6f 72 65 20 65 76 65 72 79 74  e' before everyt
8ca0: 68 69 6e 67 20 28 75 6e 6c 65 73 73 20 69 74 27  hing (unless it'
8cb0: 73 20 61 20 76 61 6c 69 64 20 63 6f 6d 6d 61 6e  s a valid comman
8cc0: 64 29 0d 0a 20 20 20 20 20 20 24 53 63 72 69 70  d)..      $Scrip
8cd0: 74 54 65 78 74 5b 28 24 74 6f 6b 65 6e 2e 53 74  tText[($token.St
8ce0: 61 72 74 4c 69 6e 65 20 2d 20 31 29 5d 20 3d 20  artLine - 1)] = 
8cf0: 24 53 63 72 69 70 74 54 65 78 74 5b 28 24 74 6f  $ScriptText[($to
8d00: 6b 65 6e 2e 53 74 61 72 74 4c 69 6e 65 20 2d 20  ken.StartLine - 
8d10: 31 29 5d 2e 49 6e 73 65 72 74 28 20 24 74 6f 6b  1)].Insert( $tok
8d20: 65 6e 2e 53 74 61 72 74 43 6f 6c 75 6d 6e 20 2d  en.StartColumn -
8d30: 31 2c 20 22 78 65 20 22 20 29 0d 0a 20 20 20 7d  1, "xe " )..   }
8d40: 0d 0a 20 20 20 57 72 69 74 65 2d 4f 75 74 70 75  ..   Write-Outpu
8d50: 74 20 28 5b 53 63 72 69 70 74 42 6c 6f 63 6b 5d  t ([ScriptBlock]
8d60: 3a 3a 43 72 65 61 74 65 28 20 28 24 53 63 72 69  ::Create( ($Scri
8d70: 70 74 54 65 78 74 20 2d 6a 6f 69 6e 20 22 60 6e  ptText -join "`n
8d80: 22 29 20 29 29 0d 0a 7d 0d 0a 0d 0a 0d 0a 0d 0a  ") ))..}........
8d90: 23 23 23 23 23 23 23 23 20 58 61 6d 6c 0d 0a 23  ######## Xaml..#
8da0: 20 20 69 66 28 24 50 53 56 65 72 73 69 6f 6e 54    if($PSVersionT
8db0: 61 62 6c 65 2e 43 4c 52 56 65 72 73 69 6f 6e 20  able.CLRVersion 
8dc0: 2d 67 65 20 22 34 2e 30 22 29 7b 0d 0a 23 20 20  -ge "4.0"){..#  
8dd0: 20 20 20 74 72 61 70 20 7b 20 63 6f 6e 74 69 6e     trap { contin
8de0: 75 65 20 7d 0d 0a 23 20 20 20 20 20 5b 52 65 66  ue }..#     [Ref
8df0: 6c 65 63 74 69 6f 6e 2e 41 73 73 65 6d 62 6c 79  lection.Assembly
8e00: 5d 3a 3a 4c 6f 61 64 57 69 74 68 50 61 72 74 69  ]::LoadWithParti
8e10: 61 6c 4e 61 6d 65 28 22 53 79 73 74 65 6d 2e 58  alName("System.X
8e20: 61 6d 6c 22 29 20 7c 20 4f 75 74 2d 4e 75 6c 6c  aml") | Out-Null
8e30: 0d 0a 23 20 20 20 20 20 69 66 28 22 53 79 73 74  ..#     if("Syst
8e40: 65 6d 2e 58 61 6d 6c 2e 58 61 6d 6c 53 65 72 76  em.Xaml.XamlServ
8e50: 69 63 65 73 22 20 2d 61 73 20 5b 74 79 70 65 5d  ices" -as [type]
8e60: 29 20 7b 0d 0a 20 20 20 20 0d 0a 20 20 20 23 20  ) {..    ..   # 
8e70: 20 7d 0d 0a 23 20 20 7d 0d 0a 20 20 20 0d 0a 45   }..#  }..   ..E
8e80: 78 70 6f 72 74 2d 4d 6f 64 75 6c 65 4d 65 6d 62  xport-ModuleMemb
8e90: 65 72 20 2d 61 6c 69 61 73 20 2a 20 2d 66 75 6e  er -alias * -fun
8ea0: 63 74 69 6f 6e 20 4e 65 77 2d 58 44 6f 63 75 6d  ction New-XDocum
8eb0: 65 6e 74 2c 20 4e 65 77 2d 58 41 74 74 72 69 62  ent, New-XAttrib
8ec0: 75 74 65 2c 20 4e 65 77 2d 58 45 6c 65 6d 65 6e  ute, New-XElemen
8ed0: 74 2c 20 52 65 6d 6f 76 65 2d 58 6d 6c 4e 61 6d  t, Remove-XmlNam
8ee0: 65 73 70 61 63 65 2c 20 49 6d 70 6f 72 74 2d 58  espace, Import-X
8ef0: 6d 6c 2c 20 45 78 70 6f 72 74 2d 58 6d 6c 2c 20  ml, Export-Xml, 
8f00: 43 6f 6e 76 65 72 74 54 6f 2d 58 6d 6c 2c 20 53  ConvertTo-Xml, S
8f10: 65 6c 65 63 74 2d 58 6d 6c 2c 20 55 70 64 61 74  elect-Xml, Updat
8f20: 65 2d 58 6d 6c 2c 20 46 6f 72 6d 61 74 2d 58 6d  e-Xml, Format-Xm
8f30: 6c 2c 20 43 6f 6e 76 65 72 74 54 6f 2d 43 6c 69  l, ConvertTo-Cli
8f40: 58 6d 6c 2c 20 43 6f 6e 76 65 72 74 46 72 6f 6d  Xml, ConvertFrom
8f50: 2d 43 6c 69 58 6d 6c 0d 0a 0d 0a 23 20 53 49 47  -CliXml....# SIG
8f60: 20 23 20 42 65 67 69 6e 20 73 69 67 6e 61 74 75   # Begin signatu
8f70: 72 65 20 62 6c 6f 63 6b 0d 0a 23 20 4d 49 49 49  re block..# MIII
8f80: 44 51 59 4a 4b 6f 5a 49 68 76 63 4e 41 51 63 43  DQYJKoZIhvcNAQcC
8f90: 6f 49 49 48 2f 6a 43 43 42 2f 6f 43 41 51 45 78  oIIH/jCCB/oCAQEx
8fa0: 43 7a 41 4a 42 67 55 72 44 67 4d 43 47 67 55 41  CzAJBgUrDgMCGgUA
8fb0: 4d 47 6b 47 43 69 73 47 41 51 51 42 0d 0a 23 20  MGkGCisGAQQB..# 
8fc0: 67 6a 63 43 41 51 53 67 57 7a 42 5a 4d 44 51 47  gjcCAQSgWzBZMDQG
8fd0: 43 69 73 47 41 51 51 42 67 6a 63 43 41 52 34 77  CisGAQQBgjcCAR4w
8fe0: 4a 67 49 44 41 51 41 41 42 42 41 66 7a 44 74 67  JgIDAQAABBAfzDtg
8ff0: 57 55 73 49 54 72 63 6b 30 73 59 70 66 76 4e 52  WUsITrck0sYpfvNR
9000: 0d 0a 23 20 41 67 45 41 41 67 45 41 41 67 45 41  ..# AgEAAgEAAgEA
9010: 41 67 45 41 41 67 45 41 4d 43 45 77 43 51 59 46  AgEAAgEAMCEwCQYF
9020: 4b 77 34 44 41 68 6f 46 41 41 51 55 69 4d 52 4c  Kw4DAhoFAAQUiMRL
9030: 49 37 69 4c 50 65 57 75 58 4c 64 62 37 6c 4d 64  I7iLPeWuXLdb7lMd
9040: 5a 6c 79 6d 0d 0a 23 20 66 7a 43 67 67 67 55 72  Zlym..# fzCgggUr
9050: 4d 49 49 46 4a 7a 43 43 42 41 2b 67 41 77 49 42  MIIFJzCCBA+gAwIB
9060: 41 67 49 51 48 43 41 67 66 35 37 70 56 4f 6e 4a  AgIQHCAgf57pVOnJ
9070: 63 6a 4b 72 4d 4f 2f 64 74 6a 41 4e 42 67 6b 71  cjKrMO/dtjANBgkq
9080: 68 6b 69 47 39 77 30 42 0d 0a 23 20 41 51 55 46  hkiG9w0B..# AQUF
9090: 41 44 43 42 6c 54 45 4c 4d 41 6b 47 41 31 55 45  ADCBlTELMAkGA1UE
90a0: 42 68 4d 43 56 56 4d 78 43 7a 41 4a 42 67 4e 56  BhMCVVMxCzAJBgNV
90b0: 42 41 67 54 41 6c 56 55 4d 52 63 77 46 51 59 44  BAgTAlVUMRcwFQYD
90c0: 56 51 51 48 45 77 35 54 59 57 78 30 0d 0a 23 20  VQQHEw5TYWx0..# 
90d0: 49 45 78 68 61 32 55 67 51 32 6c 30 65 54 45 65  IExha2UgQ2l0eTEe
90e0: 4d 42 77 47 41 31 55 45 43 68 4d 56 56 47 68 6c  MBwGA1UEChMVVGhl
90f0: 49 46 56 54 52 56 4a 55 55 6c 56 54 56 43 42 4f  IFVTRVJUUlVTVCBO
9100: 5a 58 52 33 62 33 4a 72 4d 53 45 77 48 77 59 44  ZXR3b3JrMSEwHwYD
9110: 0d 0a 23 20 56 51 51 4c 45 78 68 6f 64 48 52 77  ..# VQQLExhodHRw
9120: 4f 69 38 76 64 33 64 33 4c 6e 56 7a 5a 58 4a 30  Oi8vd3d3LnVzZXJ0
9130: 63 6e 56 7a 64 43 35 6a 62 32 30 78 48 54 41 62  cnVzdC5jb20xHTAb
9140: 42 67 4e 56 42 41 4d 54 46 46 56 55 54 69 31 56  BgNVBAMTFFVUTi1V
9150: 55 30 56 53 0d 0a 23 20 52 6d 6c 79 63 33 51 74  U0VS..# Rmlyc3Qt
9160: 54 32 4a 71 5a 57 4e 30 4d 42 34 58 44 54 45 78  T2JqZWN0MB4XDTEx
9170: 4d 44 51 79 4e 54 41 77 4d 44 41 77 4d 46 6f 58  MDQyNTAwMDAwMFoX
9180: 44 54 45 79 4d 44 51 79 4e 44 49 7a 4e 54 6b 31  DTEyMDQyNDIzNTk1
9190: 4f 56 6f 77 67 5a 55 78 0d 0a 23 20 43 7a 41 4a  OVowgZUx..# CzAJ
91a0: 42 67 4e 56 42 41 59 54 41 6c 56 54 4d 51 34 77  BgNVBAYTAlVTMQ4w
91b0: 44 41 59 44 56 51 51 52 44 41 55 77 4e 6a 67 31  DAYDVQQRDAUwNjg1
91c0: 4d 44 45 55 4d 42 49 47 41 31 55 45 43 41 77 4c  MDEUMBIGA1UECAwL
91d0: 51 32 39 75 62 6d 56 6a 64 47 6c 6a 0d 0a 23 20  Q29ubmVjdGlj..# 
91e0: 64 58 51 78 45 44 41 4f 42 67 4e 56 42 41 63 4d  dXQxEDAOBgNVBAcM
91f0: 42 30 35 76 63 6e 64 68 62 47 73 78 46 6a 41 55  B05vcndhbGsxFjAU
9200: 42 67 4e 56 42 41 6b 4d 44 54 51 31 49 45 64 73  BgNVBAkMDTQ1IEds
9210: 62 33 5a 6c 63 69 42 42 64 6d 55 78 47 6a 41 59  b3ZlciBBdmUxGjAY
9220: 0d 0a 23 20 42 67 4e 56 42 41 6f 4d 45 56 68 6c  ..# BgNVBAoMEVhl
9230: 63 6d 39 34 49 45 4e 76 63 6e 42 76 63 6d 46 30  cm94IENvcnBvcmF0
9240: 61 57 39 75 4d 52 6f 77 47 41 59 44 56 51 51 44  aW9uMRowGAYDVQQD
9250: 44 42 46 59 5a 58 4a 76 65 43 42 44 62 33 4a 77  DBFYZXJveCBDb3Jw
9260: 62 33 4a 68 0d 0a 23 20 64 47 6c 76 62 6a 43 43  b3Jh..# dGlvbjCC
9270: 41 53 49 77 44 51 59 4a 4b 6f 5a 49 68 76 63 4e  ASIwDQYJKoZIhvcN
9280: 41 51 45 42 42 51 41 44 67 67 45 50 41 44 43 43  AQEBBQADggEPADCC
9290: 41 51 6f 43 67 67 45 42 41 4e 61 58 52 2b 38 57  AQoCggEBANaXR+8W
92a0: 2b 61 48 36 6f 66 69 4f 0d 0a 23 20 62 5a 52 64  +aH6ofiO..# bZRd
92b0: 49 52 42 75 76 65 6d 4a 2f 38 63 32 66 44 77 62  IRBuvemJ/8c2fDwb
92c0: 48 56 4c 42 4d 69 65 69 47 39 45 71 73 35 2b 58  HVLBMieiG9Eqs5+X
92d0: 4b 5a 33 4d 31 37 53 7a 38 47 42 4e 7a 51 34 62  KZ3M17Sz8GBNzQ4b
92e0: 6c 75 6b 32 65 73 49 79 63 72 39 7a 0d 0a 23 20  luk2esIycr9z..# 
92f0: 79 52 2f 49 53 42 6a 56 78 7a 31 52 63 78 48 37  yR/ISBjVxz1RcxH7
9300: 39 76 75 76 4d 36 68 75 73 4f 41 4b 63 32 59 68  9vuvM6husOAKc2Yh
9310: 6e 47 71 41 36 76 6d 66 57 6f 6b 6d 45 66 44 72  nGqA6vmfWokmEfDr
9320: 4f 48 31 71 4c 4b 41 34 32 32 36 74 50 58 42 45  OH1qLKA4226tPXBE
9330: 0d 0a 23 20 65 4e 54 53 44 72 59 74 58 46 5a 36  ..# eNTSDrYtXFZ6
9340: 6a 59 57 76 39 6b 71 47 63 52 4d 42 7a 56 37 4e  jYWv9kqGcRMBzV7N
9350: 50 76 4a 77 51 6f 4d 44 45 6c 31 64 62 4e 41 58  PvJwQoMDEl1dbNAX
9360: 6f 39 39 52 61 48 47 6a 41 66 56 6b 43 53 4e 59  o99RaHGjAfVkCSNY
9370: 4d 4d 31 31 0d 0a 23 20 6a 7a 5a 32 2f 44 79 41  MM11..# jzZ2/DyA
9380: 71 56 67 4b 56 6e 4e 76 69 52 51 2b 57 71 38 48  qVgKVnNviRQ+Wq8H
9390: 50 78 50 37 45 71 67 2f 36 62 32 44 56 77 31 4e  PxP7Eqg/6b2DVw1N
93a0: 6f 6b 67 33 49 44 65 79 46 52 6c 6f 32 68 65 30  okg3IDeyFRlo2he0
93b0: 39 59 77 56 45 56 2b 72 0d 0a 23 20 47 4c 76 6a  9YwVEV+r..# GLvj
93c0: 55 42 6d 56 52 51 50 61 75 4a 49 72 31 45 55 67  UBmVRQPauJIr1EUg
93d0: 7a 38 35 62 79 57 74 59 41 55 57 4f 58 4e 49 46  z85byWtYAUWOXNIF
93e0: 69 57 72 71 4f 4b 6a 2f 43 6c 76 69 35 59 39 4d  iWrqOKj/Clvi5Y9M
93f0: 30 35 61 31 54 77 53 69 34 6f 30 46 0d 0a 23 20  05a1TwSi4o0F..# 
9400: 79 66 61 34 6b 65 45 43 41 77 45 41 41 61 4f 43  yfa4keECAwEAAaOC
9410: 41 57 38 77 67 67 46 72 4d 42 38 47 41 31 55 64  AW8wggFrMB8GA1Ud
9420: 49 77 51 59 4d 42 61 41 46 4e 72 74 5a 48 51 55  IwQYMBaAFNrtZHQU
9430: 6e 42 51 38 71 39 32 5a 71 62 31 62 4b 45 32 4c  nBQ8q92Zqb1bKE2L
9440: 0d 0a 23 20 50 4d 6e 59 4d 42 30 47 41 31 55 64  ..# PMnYMB0GA1Ud
9450: 44 67 51 57 42 42 54 4b 61 44 67 51 30 6c 54 6f  DgQWBBTKaDgQ0lTo
9460: 55 48 41 49 2b 6a 79 2f 43 44 6e 30 42 6c 75 58  UHAI+jy/CDn0BluX
9470: 46 6a 41 4f 42 67 4e 56 48 51 38 42 41 66 38 45  FjAOBgNVHQ8BAf8E
9480: 42 41 4d 43 0d 0a 23 20 42 34 41 77 44 41 59 44  BAMC..# B4AwDAYD
9490: 56 52 30 54 41 51 48 2f 42 41 49 77 41 44 41 54  VR0TAQH/BAIwADAT
94a0: 42 67 4e 56 48 53 55 45 44 44 41 4b 42 67 67 72  BgNVHSUEDDAKBggr
94b0: 42 67 45 46 42 51 63 44 41 7a 41 52 42 67 6c 67  BgEFBQcDAzARBglg
94c0: 68 6b 67 42 68 76 68 43 0d 0a 23 20 41 51 45 45  hkgBhvhC..# AQEE
94d0: 42 41 4d 43 42 42 41 77 52 67 59 44 56 52 30 67  BAMCBBAwRgYDVR0g
94e0: 42 44 38 77 50 54 41 37 42 67 77 72 42 67 45 45  BD8wPTA7BgwrBgEE
94f0: 41 62 49 78 41 51 49 42 41 77 49 77 4b 7a 41 70  AbIxAQIBAwIwKzAp
9500: 42 67 67 72 42 67 45 46 42 51 63 43 0d 0a 23 20  BggrBgEFBQcC..# 
9510: 41 52 59 64 61 48 52 30 63 48 4d 36 4c 79 39 7a  ARYdaHR0cHM6Ly9z
9520: 5a 57 4e 31 63 6d 55 75 59 32 39 74 62 32 52 76  ZWN1cmUuY29tb2Rv
9530: 4c 6d 35 6c 64 43 39 44 55 46 4d 77 51 67 59 44  Lm5ldC9DUFMwQgYD
9540: 56 52 30 66 42 44 73 77 4f 54 41 33 6f 44 57 67  VR0fBDswOTA3oDWg
9550: 0d 0a 23 20 4d 34 59 78 61 48 52 30 63 44 6f 76  ..# M4YxaHR0cDov
9560: 4c 32 4e 79 62 43 35 31 63 32 56 79 64 48 4a 31  L2NybC51c2VydHJ1
9570: 63 33 51 75 59 32 39 74 4c 31 56 55 54 69 31 56  c3QuY29tL1VUTi1V
9580: 55 30 56 53 52 6d 6c 79 63 33 51 74 54 32 4a 71  U0VSRmlyc3QtT2Jq
9590: 5a 57 4e 30 0d 0a 23 20 4c 6d 4e 79 62 44 41 30  ZWN0..# LmNybDA0
95a0: 42 67 67 72 42 67 45 46 42 51 63 42 41 51 51 6f  BggrBgEFBQcBAQQo
95b0: 4d 43 59 77 4a 41 59 49 4b 77 59 42 42 51 55 48  MCYwJAYIKwYBBQUH
95c0: 4d 41 47 47 47 47 68 30 64 48 41 36 4c 79 39 76  MAGGGGh0dHA6Ly9v
95d0: 59 33 4e 77 4c 6d 4e 76 0d 0a 23 20 62 57 39 6b  Y3NwLmNv..# bW9k
95e0: 62 32 4e 68 4c 6d 4e 76 62 54 41 68 42 67 4e 56  b2NhLmNvbTAhBgNV
95f0: 48 52 45 45 47 6a 41 59 67 52 5a 4b 62 32 56 73  HREEGjAYgRZKb2Vs
9600: 4c 6b 4a 6c 62 6d 35 6c 64 48 52 41 65 47 56 79  LkJlbm5ldHRAeGVy
9610: 62 33 67 75 59 32 39 74 4d 41 30 47 0d 0a 23 20  b3guY29tMA0G..# 
9620: 43 53 71 47 53 49 62 33 44 51 45 42 42 51 55 41  CSqGSIb3DQEBBQUA
9630: 41 34 49 42 41 51 41 7a 77 55 77 79 30 30 73 45  A4IBAQAzwUwy00sE
9640: 4f 67 67 41 61 76 71 72 4e 6f 4e 65 45 56 72 30  OggAavqrNoNeEVr0
9650: 6f 36 32 33 44 67 47 32 2f 32 45 75 54 73 41 36  o623DgG2/2EuTsA6
9660: 0d 0a 23 20 32 77 49 30 41 72 62 35 44 30 73 2f  ..# 2wI0Arb5D0s/
9670: 69 63 61 6e 73 68 48 67 57 77 4a 5a 42 45 4d 5a  icanshHgWwJZBEMZ
9680: 65 48 61 31 37 41 69 2f 45 33 66 6f 43 70 6a 36  eHa17Ai/E3foCpj6
9690: 72 41 33 59 34 76 49 51 58 48 75 6b 6c 75 69 53  rA3Y4vIQXHukluiS
96a0: 6d 6a 55 36 0d 0a 23 20 62 57 54 67 46 35 56 62  mjU6..# bWTgF5Vb
96b0: 4e 54 70 76 68 6c 4f 4f 36 45 37 59 61 2f 72 42  NTpvhlOO6E7Ya/rB
96c0: 72 34 6f 6a 34 64 71 54 45 45 72 6b 53 37 61 63  r4oj4dqTEErkS7ac
96d0: 67 42 48 4b 72 6a 50 4f 70 74 43 69 55 34 42 53  gBHKrjPOptCiU4BS
96e0: 44 71 74 6c 30 6b 35 7a 0d 0a 23 20 4f 49 69 61  Dqtl0k5z..# OIia
96f0: 77 79 52 53 49 54 48 59 45 63 43 63 49 30 59 6c  wyRSITHYEcCcI0Yl
9700: 37 56 49 7a 38 45 44 62 6c 4f 51 49 33 62 34 4a  7VIz8EDblOQI3b4J
9710: 47 59 63 6d 4a 37 44 2b 70 65 59 72 6e 49 32 7a  GYcmJ7D+peYrnI2z
9720: 6f 51 79 58 44 69 67 63 49 6a 34 6c 0d 0a 23 20  oQyXDigcIj4l..# 
9730: 56 6c 69 70 6e 6a 6e 76 59 73 46 2b 4a 62 50 6b  VlipnjnvYsF+JbPk
9740: 51 59 38 58 62 4d 4f 2b 59 63 34 39 30 42 68 38  QY8XbMO+Yc490Bh8
9750: 42 4d 58 50 74 75 4c 52 31 4b 4d 75 49 58 50 4b  BMXPtuLR1KMuIXPK
9760: 37 44 4b 58 37 4a 50 6d 4a 63 59 37 6b 4b 46 2f  7DKX7JPmJcY7kKF/
9770: 0d 0a 23 20 53 50 76 69 79 6b 30 48 45 37 52 6c  ..# SPviyk0HE7Rl
9780: 64 73 73 65 73 37 33 55 46 38 77 54 33 6c 67 6a  dsses73UF8wT3lgj
9790: 35 37 46 69 55 71 58 38 46 64 54 61 37 4e 6c 6c  57FiUqX8FdTa7Nll
97a0: 4d 59 49 43 54 44 43 43 41 6b 67 43 41 51 45 77  MYICTDCCAkgCAQEw
97b0: 67 61 6f 77 0d 0a 23 20 67 5a 55 78 43 7a 41 4a  gaow..# gZUxCzAJ
97c0: 42 67 4e 56 42 41 59 54 41 6c 56 54 4d 51 73 77  BgNVBAYTAlVTMQsw
97d0: 43 51 59 44 56 51 51 49 45 77 4a 56 56 44 45 58  CQYDVQQIEwJVVDEX
97e0: 4d 42 55 47 41 31 55 45 42 78 4d 4f 55 32 46 73  MBUGA1UEBxMOU2Fs
97f0: 64 43 42 4d 59 57 74 6c 0d 0a 23 20 49 45 4e 70  dCBMYWtl..# IENp
9800: 64 48 6b 78 48 6a 41 63 42 67 4e 56 42 41 6f 54  dHkxHjAcBgNVBAoT
9810: 46 56 52 6f 5a 53 42 56 55 30 56 53 56 46 4a 56  FVRoZSBVU0VSVFJV
9820: 55 31 51 67 54 6d 56 30 64 32 39 79 61 7a 45 68  U1QgTmV0d29yazEh
9830: 4d 42 38 47 41 31 55 45 43 78 4d 59 0d 0a 23 20  MB8GA1UECxMY..# 
9840: 61 48 52 30 63 44 6f 76 4c 33 64 33 64 79 35 31  aHR0cDovL3d3dy51
9850: 63 32 56 79 64 48 4a 31 63 33 51 75 59 32 39 74  c2VydHJ1c3QuY29t
9860: 4d 52 30 77 47 77 59 44 56 51 51 44 45 78 52 56  MR0wGwYDVQQDExRV
9870: 56 45 34 74 56 56 4e 46 55 6b 5a 70 63 6e 4e 30  VE4tVVNFUkZpcnN0
9880: 0d 0a 23 20 4c 55 39 69 61 6d 56 6a 64 41 49 51  ..# LU9iamVjdAIQ
9890: 48 43 41 67 66 35 37 70 56 4f 6e 4a 63 6a 4b 72  HCAgf57pVOnJcjKr
98a0: 4d 4f 2f 64 74 6a 41 4a 42 67 55 72 44 67 4d 43  MO/dtjAJBgUrDgMC
98b0: 47 67 55 41 6f 48 67 77 47 41 59 4b 4b 77 59 42  GgUAoHgwGAYKKwYB
98c0: 42 41 47 43 0d 0a 23 20 4e 77 49 42 44 44 45 4b  BAGC..# NwIBDDEK
98d0: 4d 41 69 67 41 6f 41 41 6f 51 4b 41 41 44 41 5a  MAigAoAAoQKAADAZ
98e0: 42 67 6b 71 68 6b 69 47 39 77 30 42 43 51 4d 78  BgkqhkiG9w0BCQMx
98f0: 44 41 59 4b 4b 77 59 42 42 41 47 43 4e 77 49 42  DAYKKwYBBAGCNwIB
9900: 42 44 41 63 42 67 6f 72 0d 0a 23 20 42 67 45 45  BDAcBgor..# BgEE
9910: 41 59 49 33 41 67 45 4c 4d 51 34 77 44 41 59 4b  AYI3AgELMQ4wDAYK
9920: 4b 77 59 42 42 41 47 43 4e 77 49 42 46 54 41 6a  KwYBBAGCNwIBFTAj
9930: 42 67 6b 71 68 6b 69 47 39 77 30 42 43 51 51 78  BgkqhkiG9w0BCQQx
9940: 46 67 51 55 67 63 32 41 6b 56 71 45 0d 0a 23 20  FgQUgc2AkVqE..# 
9950: 45 4e 38 34 39 6a 38 47 30 47 6f 68 4c 6c 77 75  EN849j8G0GohLlwu
9960: 65 4a 34 77 44 51 59 4a 4b 6f 5a 49 68 76 63 4e  eJ4wDQYJKoZIhvcN
9970: 41 51 45 42 42 51 41 45 67 67 45 41 4c 73 44 46  AQEBBQAEggEALsDF
9980: 42 76 4c 6e 31 53 45 42 6b 2b 66 79 4c 67 48 4c  BvLn1SEBk+fyLgHL
9990: 0d 0a 23 20 69 62 6b 41 48 44 74 72 57 4d 77 66  ..# ibkAHDtrWMwf
99a0: 53 4c 76 4f 76 33 53 77 36 31 4f 61 2b 6d 76 69  SLvOv3Sw61Oa+mvi
99b0: 4a 70 38 48 30 70 4f 44 61 2b 33 7a 66 4a 78 45  Jp8H0pODa+3zfJxE
99c0: 6f 52 61 30 4a 48 59 57 55 53 4d 75 74 4e 47 30  oRa0JHYWUSMutNG0
99d0: 43 49 67 39 0d 0a 23 20 59 69 45 66 31 48 4c 4e  CIg9..# YiEf1HLN
99e0: 6f 59 61 6d 39 73 39 72 74 52 39 59 57 64 76 39  oYam9s9rtR9YWdv9
99f0: 77 78 33 43 6b 55 39 43 69 32 79 47 66 42 34 6f  wx3CkU9Ci2yGfB4o
9a00: 45 63 31 65 43 67 2f 31 70 72 45 48 47 37 58 57  Ec1eCg/1prEHG7XW
9a10: 6a 71 5a 44 43 36 75 47 0d 0a 23 20 76 68 46 55  jqZDC6uG..# vhFU
9a20: 4e 44 48 70 39 73 57 53 46 2f 72 75 56 53 33 52  NDHp9sWSF/ruVS3R
9a30: 42 45 6d 32 56 42 4a 6b 76 65 68 70 49 73 42 34  BEm2VBJkvehpIsB4
9a40: 57 73 51 30 61 75 6e 44 68 73 55 34 74 32 6f 46  WsQ0aunDhsU4t2oF
9a50: 6e 46 59 43 30 6c 65 61 61 73 46 79 0d 0a 23 20  nFYC0leaasFy..# 
9a60: 72 4c 4e 7a 7a 6a 39 54 34 43 5a 46 79 64 74 54  rLNzzj9T4CZFydtT
9a70: 56 68 35 78 76 58 47 30 6c 57 76 35 53 4d 4e 68  Vh5xvXG0lWv5SMNh
9a80: 71 65 67 59 6a 6c 2b 67 66 78 47 78 72 4c 42 72  qegYjl+gfxGxrLBr
9a90: 4e 5a 69 43 54 6b 43 38 76 58 32 63 35 45 48 4e  NZiCTkC8vX2c5EHN
9aa0: 0d 0a 23 20 41 68 73 71 44 35 33 74 48 30 77 70  ..# AhsqD53tH0wp
9ab0: 43 2b 69 63 4c 6f 4b 2b 66 2f 44 50 7a 69 36 78  C+icLoK+f/DPzi6x
9ac0: 71 4a 56 4f 61 51 31 6f 72 75 46 6b 39 34 52 59  qJVOaQ1oruFk94RY
9ad0: 4e 52 41 46 47 63 67 57 49 6e 71 4b 63 32 47 76  NRAFGcgWInqKc2Gv
9ae0: 73 66 36 50 0d 0a 23 20 72 41 3d 3d 0d 0a 23 20  sf6P..# rA==..# 
9af0: 53 49 47 20 23 20 45 6e 64 20 73 69 67 6e 61 74  SIG # End signat
9b00: 75 72 65 20 62 6c 6f 63 6b 0d 0a                 ure block..