PoshCode Archive  Hex Artifact Content

Artifact c4a80fb342cc7ef8367736b16cd3d2e9602ea55d41921e2b0788deb0db7dffa4:

  • File Xml-Module.ps1 — part of check-in [f985fb27e5] at 2018-06-10 12:59:59 on branch trunk — My rewritten XML DSL now has better element name handling. See Blog Comments (user: Joel Bennett size: 26549)

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 4d 79 20 72 65 77  cription: My rew
0050: 72 69 74 74 65 6e 20 58 4d 4c 20 44 53 4c 20 6e  ritten XML DSL n
0060: 6f 77 20 68 61 73 20 62 65 74 74 65 72 20 65 6c  ow has better el
0070: 65 6d 65 6e 74 20 6e 61 6d 65 20 68 61 6e 64 6c  ement name handl
0080: 69 6e 67 2e 20 53 65 65 20 42 6c 6f 67 20 43 6f  ing. See Blog Co
0090: 6d 6d 65 6e 74 73 20 0d 0a 23 20 76 65 72 73 69  mments ..# versi
00a0: 6f 6e 3a 20 34 2e 33 0d 0a 23 20 74 79 70 65 3a  on: 4.3..# type:
00b0: 20 66 75 6e 63 74 69 6f 6e 0d 0a 23 20 61 75 74   function..# aut
00c0: 68 6f 72 3a 20 4a 6f 65 6c 20 42 65 6e 6e 65 74  hor: Joel Bennet
00d0: 74 0d 0a 23 20 6c 69 63 65 6e 73 65 3a 20 43 43  t..# license: CC
00e0: 30 0d 0a 23 20 66 75 6e 63 74 69 6f 6e 3a 20 53  0..# function: S
00f0: 65 6c 65 63 74 2d 58 6d 6c 0d 0a 23 20 78 2d 70  elect-Xml..# x-p
0100: 6f 73 68 63 6f 64 65 2d 69 64 3a 20 31 36 38 32  oshcode-id: 1682
0110: 0d 0a 23 20 78 2d 64 65 72 69 76 65 64 2d 66 72  ..# x-derived-fr
0120: 6f 6d 2d 69 64 3a 20 31 38 38 38 0d 0a 23 20 78  om-id: 1888..# x
0130: 2d 61 72 63 68 69 76 65 64 3a 20 32 30 31 31 2d  -archived: 2011-
0140: 30 39 2d 32 32 54 30 39 3a 32 34 3a 35 30 0d 0a  09-22T09:24:50..
0150: 23 20 78 2d 70 75 62 6c 69 73 68 65 64 3a 20 32  # x-published: 2
0160: 30 31 31 2d 30 33 2d 30 34 54 31 34 3a 35 33 3a  011-03-04T14:53:
0170: 30 30 0d 0a 23 0d 0a 23 20 4e 65 77 2d 58 44 6f  00..#..# New-XDo
0180: 63 75 6d 65 6e 74 20 6e 6f 20 6c 6f 6e 67 65 72  cument no longer
0190: 20 72 65 71 75 69 72 65 73 20 74 68 65 20 e2 80   requires the ..
01a0: 9c 78 65 e2 80 9d 20 63 6f 6d 6d 61 6e 64 20 61  .xe... command a
01b0: 73 20 6c 6f 6e 67 20 61 73 20 74 68 65 20 6e 61  s long as the na
01c0: 6d 65 20 6f 66 20 79 6f 75 72 20 58 4d 4c 20 45  me of your XML E
01d0: 6c 65 6d 65 6e 74 20 64 6f 65 73 6e e2 80 99 74  lement doesn...t
01e0: 20 63 6f 69 6e 63 69 64 65 20 77 69 74 68 20 74   coincide with t
01f0: 68 61 74 20 6f 66 20 61 20 50 6f 77 65 72 53 68  hat of a PowerSh
0200: 65 6c 6c 20 63 6f 6d 6d 61 6e 64 20 28 69 66 20  ell command (if 
0210: 69 74 20 64 6f 65 73 2c 20 79 6f 75 20 6e 65 65  it does, you nee
0220: 64 20 74 68 65 20 e2 80 9c 78 65 e2 80 9d 20 6f  d the ...xe... o
0230: 6e 20 74 68 65 20 66 72 6f 6e 74 29 2c 20 61 6e  n the front), an
0240: 64 20 6e 61 6d 65 73 70 61 63 65 73 20 63 61 6e  d namespaces can
0250: 20 62 65 20 72 65 66 65 72 72 65 64 20 74 6f 20   be referred to 
0260: 62 79 20 73 68 6f 72 74 20 6e 61 6d 65 20 6c 69  by short name li
0270: 6b 65 20 64 63 3a 63 72 65 61 74 6f 72 20 74 6f  ke dc:creator to
0280: 20 6b 65 65 70 20 74 68 69 6e 67 73 20 73 69 6d   keep things sim
0290: 70 6c 65 2e 20 20 50 6c 65 61 73 65 20 72 65 76  ple.  Please rev
02a0: 69 65 77 20 74 68 65 20 65 78 61 6d 70 6c 65 73  iew the examples
02b0: 20 6f 6e 20 4e 65 77 2d 58 44 6f 63 75 6d 65 6e   on New-XDocumen
02c0: 74 20 61 73 20 74 68 69 73 20 69 73 20 61 20 62  t as this is a b
02d0: 72 65 61 6b 69 6e 67 20 63 68 61 6e 67 65 2e 0d  reaking change..
02e0: 0a 23 20 68 34 2e 20 54 68 65 20 6f 74 68 65 72  .# h4. The other
02f0: 20 66 75 6e 63 74 69 6f 6e 73 20 72 6f 75 6e 64   functions round
0300: 20 6f 75 74 20 74 68 65 20 73 65 74 20 6f 66 20   out the set of 
0310: 58 4d 4c 20 66 75 6e 63 74 69 6f 6e 61 6c 69 74  XML functionalit
0320: 79 20 28 65 73 70 65 63 69 61 6c 6c 79 20 69 66  y (especially if
0330: 20 79 6f 75 20 64 6f 6e e2 80 99 74 20 68 61 76   you don...t hav
0340: 65 20 50 53 43 58 29 2e 20 0d 0a 23 20 49 6e 20  e PSCX). ..# In 
0350: 70 61 72 74 69 63 75 6c 61 72 2c 20 6d 79 20 53  particular, my S
0360: 65 6c 65 63 74 2d 58 4d 4c 20 69 6d 70 72 6f 76  elect-XML improv
0370: 65 73 20 6f 76 65 72 20 74 68 65 20 62 75 69 6c  es over the buil
0380: 74 2d 69 6e 20 53 65 6c 65 63 74 2d 58 4d 4c 20  t-in Select-XML 
0390: 62 79 20 6c 65 76 65 72 61 67 69 6e 67 20 52 65  by leveraging Re
03a0: 6d 6f 76 65 2d 58 6d 6c 4e 61 6d 65 73 70 61 63  move-XmlNamespac
03b0: 65 20 74 6f 20 70 72 6f 76 69 64 65 20 61 20 2d  e to provide a -
03c0: 52 65 6d 6f 76 65 4e 61 6d 65 73 70 61 63 65 20  RemoveNamespace 
03d0: 70 61 72 61 6d 65 74 65 72 20 e2 80 94 20 69 66  parameter ... if
03e0: 20 69 74 e2 80 99 73 20 73 75 70 70 6c 69 65 64   it...s supplied
03f0: 2c 20 61 6c 6c 20 6f 66 20 74 68 65 20 6e 61 6d  , all of the nam
0400: 65 73 70 61 63 65 20 64 65 63 6c 61 72 61 74 69  espace declarati
0410: 6f 6e 73 20 61 6e 64 20 70 72 65 66 69 78 65 73  ons and prefixes
0420: 20 61 72 65 20 72 65 6d 6f 76 65 64 20 66 72 6f   are removed fro
0430: 6d 20 61 6c 6c 20 58 4d 4c 20 6e 6f 64 65 73 20  m all XML nodes 
0440: 28 62 79 20 61 6e 20 58 53 4c 20 74 72 61 6e 73  (by an XSL trans
0450: 66 6f 72 6d 29 20 62 65 66 6f 72 65 20 73 65 61  form) before sea
0460: 72 63 68 69 6e 67 20 28 73 6f 20 79 6f 75 20 63  rching (so you c
0470: 61 6e 20 61 63 74 75 61 6c 6c 79 20 66 69 6e 64  an actually find
0480: 20 74 68 69 6e 67 73 2c 20 65 76 65 6e 20 77 69   things, even wi
0490: 74 68 20 6e 61 6d 65 73 70 61 63 65 2d 71 75 61  th namespace-qua
04a0: 6c 69 66 69 65 64 20 78 6d 6c 29 2e 20 20 49 74  lified xml).  It
04b0: 20 69 73 20 69 6d 70 6f 72 74 61 6e 74 20 74 6f   is important to
04c0: 20 6e 6f 74 65 20 74 68 61 74 20 74 68 69 73 20   note that this 
04d0: 6d 65 61 6e 73 20 74 68 61 74 20 74 68 65 20 72  means that the r
04e0: 65 74 75 72 6e 65 64 20 72 65 73 75 6c 74 73 20  eturned results 
04f0: 77 69 6c 6c 20 6e 6f 74 20 68 61 76 65 20 6e 61  will not have na
0500: 6d 65 73 70 61 63 65 73 20 69 6e 20 74 68 65 6d  mespaces in them
0510: 2c 20 65 76 65 6e 20 69 66 20 74 68 65 20 69 6e  , even if the in
0520: 70 75 74 20 58 4d 4c 20 64 69 64 2e 0d 0a 23 20  put XML did...# 
0530: 41 6c 73 6f 2c 20 6f 6e 6c 79 20 72 61 77 20 58  Also, only raw X
0540: 6d 6c 4e 6f 64 65 73 20 61 72 65 20 72 65 74 75  mlNodes are retu
0550: 72 6e 65 64 20 66 72 6f 6d 20 53 65 6c 65 63 74  rned from Select
0560: 2d 58 6d 6c 2c 20 73 6f 20 74 68 65 20 6f 75 74  -Xml, so the out
0570: 70 75 74 20 69 73 6e e2 80 99 74 20 71 75 69 74  put isn...t quit
0580: 65 20 63 6f 6d 70 61 74 69 62 6c 65 20 77 69 74  e compatible wit
0590: 68 20 74 68 65 20 62 75 69 6c 74 20 69 6e 20 53  h the built in S
05a0: 65 6c 65 63 74 2d 58 6d 6c 20 e2 80 94 20 69 6e  elect-Xml ... in
05b0: 73 74 65 61 64 2c 20 69 74 e2 80 99 73 20 65 71  stead, it...s eq
05c0: 75 69 76 61 6c 65 6e 74 20 74 6f 20 75 73 69 6e  uivalent to usin
05d0: 67 20 69 74 20 74 68 65 20 77 61 79 20 49 20 75  g it the way I u
05e0: 73 75 61 6c 6c 79 20 64 6f 3a 20 53 65 6c 65 63  sually do: Selec
05f0: 74 2d 58 6d 6c 20 2e 2e 2e 20 7c 20 53 65 6c 65  t-Xml ... | Sele
0600: 63 74 2d 4f 62 6a 65 63 74 20 2d 45 78 70 61 6e  ct-Object -Expan
0610: 64 20 4e 6f 64 65 0d 0a 23 20 4e 65 77 3a 20 46  d Node..# New: F
0620: 6f 72 6d 61 74 2d 58 4d 4c 20 68 61 6e 64 6c 65  ormat-XML handle
0630: 73 20 70 61 74 68 73 20 74 6f 6f 20 3a 29 0d 0a  s paths too :)..
0640: 23 0d 0a 23 72 65 71 75 69 72 65 73 20 2d 76 65  #..#requires -ve
0650: 72 73 69 6f 6e 20 32 2e 30 0d 0a 0d 0a 23 20 49  rsion 2.0....# I
0660: 6d 70 72 6f 76 65 73 20 6f 76 65 72 20 74 68 65  mproves over the
0670: 20 62 75 69 6c 74 2d 69 6e 20 53 65 6c 65 63 74   built-in Select
0680: 2d 58 4d 4c 20 62 79 20 6c 65 76 65 72 61 67 69  -XML by leveragi
0690: 6e 67 20 52 65 6d 6f 76 65 2d 58 6d 6c 4e 61 6d  ng Remove-XmlNam
06a0: 65 73 70 61 63 65 20 68 74 74 70 60 3a 2f 2f 70  espace http`://p
06b0: 6f 73 68 63 6f 64 65 2e 6f 72 67 2f 31 34 39 32  oshcode.org/1492
06c0: 20 0d 0a 23 20 74 6f 20 70 72 6f 76 69 64 65 20   ..# to provide 
06d0: 61 20 2d 52 65 6d 6f 76 65 4e 61 6d 65 73 70 61  a -RemoveNamespa
06e0: 63 65 20 70 61 72 61 6d 65 74 65 72 20 2d 2d 20  ce parameter -- 
06f0: 69 66 20 69 74 27 73 20 73 75 70 70 6c 69 65 64  if it's supplied
0700: 2c 20 61 6c 6c 20 6f 66 20 74 68 65 20 6e 61 6d  , all of the nam
0710: 65 73 70 61 63 65 20 64 65 63 6c 61 72 61 74 69  espace declarati
0720: 6f 6e 73 20 0d 0a 23 20 61 6e 64 20 70 72 65 66  ons ..# and pref
0730: 69 78 65 73 20 61 72 65 20 72 65 6d 6f 76 65 64  ixes are removed
0740: 20 66 72 6f 6d 20 61 6c 6c 20 58 4d 4c 20 6e 6f   from all XML no
0750: 64 65 73 20 28 62 79 20 61 6e 20 58 53 4c 20 74  des (by an XSL t
0760: 72 61 6e 73 66 6f 72 6d 29 20 62 65 66 6f 72 65  ransform) before
0770: 20 73 65 61 72 63 68 69 6e 67 2e 20 0d 0a 23 20   searching. ..# 
0780: 49 4d 50 4f 52 54 41 4e 54 3a 20 72 65 74 75 72  IMPORTANT: retur
0790: 6e 65 64 20 72 65 73 75 6c 74 73 20 2a 77 69 6c  ned results *wil
07a0: 6c 20 6e 6f 74 2a 20 68 61 76 65 20 6e 61 6d 65  l not* have name
07b0: 73 70 61 63 65 73 20 69 6e 20 74 68 65 6d 2c 20  spaces in them, 
07c0: 65 76 65 6e 20 69 66 20 74 68 65 20 69 6e 70 75  even if the inpu
07d0: 74 20 58 4d 4c 20 64 69 64 2e 20 0d 0a 0d 0a 23  t XML did. ....#
07e0: 20 41 6c 73 6f 2c 20 6f 6e 6c 79 20 72 61 77 20   Also, only raw 
07f0: 58 6d 6c 4e 6f 64 65 73 20 61 72 65 20 72 65 74  XmlNodes are ret
0800: 75 72 6e 65 64 20 66 72 6f 6d 20 74 68 69 73 20  urned from this 
0810: 66 75 6e 63 74 69 6f 6e 2c 20 73 6f 20 74 68 65  function, so the
0820: 20 6f 75 74 70 75 74 20 69 73 6e 27 74 20 63 6f   output isn't co
0830: 6d 70 6c 65 74 65 6c 79 20 63 6f 6d 70 61 74 69  mpletely compati
0840: 62 6c 65 20 0d 0a 23 20 77 69 74 68 20 74 68 65  ble ..# with the
0850: 20 62 75 69 6c 74 20 69 6e 20 53 65 6c 65 63 74   built in Select
0860: 2d 58 6d 6c 2e 20 49 74 27 73 20 65 71 75 69 76  -Xml. It's equiv
0870: 61 6c 65 6e 74 20 74 6f 20 75 73 69 6e 67 20 53  alent to using S
0880: 65 6c 65 63 74 2d 58 6d 6c 20 2e 2e 2e 20 7c 20  elect-Xml ... | 
0890: 53 65 6c 65 63 74 2d 4f 62 6a 65 63 74 20 2d 45  Select-Object -E
08a0: 78 70 61 6e 64 20 4e 6f 64 65 0d 0a 0d 0a 23 20  xpand Node....# 
08b0: 56 65 72 73 69 6f 6e 20 48 69 73 74 6f 72 79 3a  Version History:
08c0: 0d 0a 23 20 53 65 6c 65 63 74 2d 58 6d 6c 20 32  ..# Select-Xml 2
08d0: 2e 30 20 54 68 69 73 20 77 61 73 20 74 68 65 20  .0 This was the 
08e0: 66 69 72 73 74 20 73 63 72 69 70 74 20 76 65 72  first script ver
08f0: 73 69 6f 6e 20 49 20 77 72 6f 74 65 2e 0d 0a 23  sion I wrote...#
0900: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0910: 69 74 20 64 69 64 6e 27 74 20 66 75 6e 63 74 69  it didn't functi
0920: 6f 6e 20 69 64 65 6e 74 69 63 61 6c 6c 79 20 74  on identically t
0930: 6f 20 74 68 65 20 62 75 69 6c 74 2d 69 6e 20 53  o the built-in S
0940: 65 6c 65 63 74 2d 58 6d 6c 20 77 69 74 68 20 72  elect-Xml with r
0950: 65 67 61 72 64 73 20 74 6f 20 70 61 72 61 6d 65  egards to parame
0960: 74 65 72 20 70 61 72 73 69 6e 67 0d 0a 23 20 53  ter parsing..# S
0970: 65 6c 65 63 74 2d 58 6d 6c 20 32 2e 31 20 4d 61  elect-Xml 2.1 Ma
0980: 74 63 68 65 64 20 74 68 65 20 62 75 69 6c 74 2d  tched the built-
0990: 69 6e 20 53 65 6c 65 63 74 2d 58 6d 6c 20 70 61  in Select-Xml pa
09a0: 72 61 6d 65 74 65 72 20 73 65 74 73 2c 20 69 74  rameter sets, it
09b0: 27 73 20 6e 6f 77 20 61 20 64 72 6f 70 2d 69 6e  's now a drop-in
09c0: 20 72 65 70 6c 61 63 65 6d 65 6e 74 20 0d 0a 23   replacement ..#
09d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
09e0: 42 55 54 20 6f 6e 6c 79 20 69 66 20 79 6f 75 20  BUT only if you 
09f0: 77 65 72 65 20 75 73 69 6e 67 20 74 68 65 20 6f  were using the o
0a00: 72 69 67 69 6e 61 6c 20 77 69 74 68 3a 20 53 65  riginal with: Se
0a10: 6c 65 63 74 2d 58 6d 6c 20 2e 2e 2e 20 7c 20 53  lect-Xml ... | S
0a20: 65 6c 65 63 74 2d 4f 62 6a 65 63 74 20 2d 45 78  elect-Object -Ex
0a30: 70 61 6e 64 20 4e 6f 64 65 0d 0a 23 20 53 65 6c  pand Node..# Sel
0a40: 65 63 74 2d 58 6d 6c 20 32 2e 32 20 46 69 78 65  ect-Xml 2.2 Fixe
0a50: 73 20 61 20 62 75 67 20 69 6e 20 74 68 65 20 2d  s a bug in the -
0a60: 43 6f 6e 74 65 6e 74 20 70 61 72 61 6d 65 74 65  Content paramete
0a70: 72 73 65 74 20 77 68 65 72 65 20 2d 52 65 6d 6f  rset where -Remo
0a80: 76 65 4e 61 6d 65 73 70 61 63 65 20 77 61 73 20  veNamespace was 
0a90: 2a 70 72 65 73 75 6d 65 64 2a 0d 0a 23 20 56 65  *presumed*..# Ve
0aa0: 72 73 69 6f 6e 20 20 20 20 33 2e 30 20 41 64 64  rsion    3.0 Add
0ab0: 65 64 20 4e 65 77 2d 58 44 6f 63 75 6d 65 6e 74  ed New-XDocument
0ac0: 20 61 6e 64 20 61 73 73 6f 63 69 61 74 65 64 20   and associated 
0ad0: 67 65 6e 65 72 61 74 69 6f 6e 20 66 75 6e 63 74  generation funct
0ae0: 69 6f 6e 73 20 66 6f 72 20 6d 79 20 58 4d 4c 20  ions for my XML 
0af0: 44 53 4c 0d 0a 23 20 56 65 72 73 69 6f 6e 20 20  DSL..# Version  
0b00: 20 20 33 2e 31 20 46 69 78 65 64 20 61 20 72 65    3.1 Fixed a re
0b10: 61 6c 6c 79 20 75 67 6c 79 20 62 75 67 20 69 6e  ally ugly bug in
0b20: 20 4e 65 77 2d 58 44 6f 63 75 6d 65 6e 74 20 69   New-XDocument i
0b30: 6e 20 33 2e 30 20 77 68 69 63 68 20 49 20 73 68  n 3.0 which I sh
0b40: 6f 75 6c 64 20 6e 6f 74 20 68 61 76 65 20 72 65  ould not have re
0b50: 6c 65 61 73 65 64 0d 0a 23 20 56 65 72 73 69 6f  leased..# Versio
0b60: 6e 20 20 20 20 34 2e 30 20 4e 65 76 65 72 20 63  n    4.0 Never c
0b70: 6f 6e 74 65 6e 74 20 74 6f 20 6c 65 61 76 65 20  ontent to leave 
0b80: 77 65 6c 6c 20 65 6e 6f 75 67 68 20 61 6c 6f 6e  well enough alon
0b90: 65 2c 20 49 27 76 65 20 63 6f 6d 70 6c 65 74 65  e, I've complete
0ba0: 6c 79 20 72 65 77 6f 72 6b 65 64 20 4e 65 77 2d  ly reworked New-
0bb0: 58 44 6f 63 75 6d 65 6e 74 0d 0a 23 20 56 65 72  XDocument..# Ver
0bc0: 73 69 6f 6e 20 20 20 20 34 2e 31 20 54 77 65 61  sion    4.1 Twea
0bd0: 6b 65 64 20 6e 61 6d 65 73 70 61 63 65 73 20 61  ked namespaces a
0be0: 67 61 69 6e 20 73 6f 20 74 68 65 79 20 64 6f 6e  gain so they don
0bf0: 27 74 20 63 61 73 63 61 64 65 20 64 6f 77 6e 20  't cascade down 
0c00: 77 68 65 6e 20 74 68 65 79 20 73 68 6f 75 6c 64  when they should
0c10: 6e 27 74 2e 20 47 6f 74 20 72 69 64 20 6f 66 20  n't. Got rid of 
0c20: 74 68 65 20 75 6e 6e 65 63 65 73 73 61 72 79 20  the unnecessary 
0c30: 73 74 61 63 6b 2e 0d 0a 23 20 56 65 72 73 69 6f  stack...# Versio
0c40: 6e 20 20 20 20 34 2e 32 20 54 69 67 68 74 65 6e  n    4.2 Tighten
0c50: 65 64 20 78 6d 6c 3a 20 6f 6e 6c 79 20 63 6d 64  ed xml: only cmd
0c60: 6c 65 74 2c 20 66 75 6e 63 74 69 6f 6e 2c 20 61  let, function, a
0c70: 6e 64 20 65 78 74 65 72 6e 61 6c 20 73 63 72 69  nd external scri
0c80: 70 74 73 2c 20 77 69 74 68 20 22 2d 22 20 69 6e  pts, with "-" in
0c90: 20 74 68 65 69 72 20 6e 61 6d 65 73 20 61 72 65   their names are
0ca0: 20 65 78 65 6d 70 74 65 64 20 66 72 6f 6d 20 62   exempted from b
0cb0: 65 69 6e 67 20 63 6f 6e 76 65 72 74 65 64 20 69  eing converted i
0cc0: 6e 74 6f 20 78 6d 6c 20 74 61 67 73 2e 0d 0a 23  nto xml tags...#
0cd0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0ce0: 46 69 78 65 64 20 73 6f 6d 65 20 61 6c 69 61 73  Fixed some alias
0cf0: 20 65 72 72 6f 72 20 6d 65 73 73 61 67 65 73 20   error messages 
0d00: 63 61 75 73 65 64 20 77 68 65 6e 20 50 53 43 58  caused when PSCX
0d10: 20 69 73 20 61 6c 72 65 61 64 79 20 6c 6f 61 64   is already load
0d20: 65 64 20 28 77 65 20 6f 76 65 72 77 72 69 74 65  ed (we overwrite
0d30: 20 74 68 65 69 72 20 61 6c 69 61 73 65 73 20 66   their aliases f
0d40: 6f 72 20 63 76 78 6d 6c 20 61 6e 64 20 66 78 6d  or cvxml and fxm
0d50: 6c 29 0d 0a 23 20 56 65 72 73 69 6f 6e 20 20 20  l)..# Version   
0d60: 20 34 2e 33 20 41 64 64 65 64 20 61 20 50 61 74   4.3 Added a Pat
0d70: 68 20 70 61 72 61 6d 65 74 65 72 20 73 65 74 20  h parameter set 
0d80: 74 6f 20 46 6f 72 6d 61 74 2d 58 4d 4c 20 73 6f  to Format-XML so
0d90: 20 79 6f 75 20 63 61 6e 20 73 70 65 63 69 66 79   you can specify
0da0: 20 78 6d 6c 20 66 69 6c 65 73 20 66 6f 72 20 70   xml files for p
0db0: 72 65 74 79 20 70 72 69 6e 74 69 6e 67 0d 0a 0d  rety printing...
0dc0: 0a 24 78 6c 72 38 72 20 3d 20 5b 74 79 70 65 5d  .$xlr8r = [type]
0dd0: 3a 3a 67 65 74 74 79 70 65 28 22 53 79 73 74 65  ::gettype("Syste
0de0: 6d 2e 4d 61 6e 61 67 65 6d 65 6e 74 2e 41 75 74  m.Management.Aut
0df0: 6f 6d 61 74 69 6f 6e 2e 54 79 70 65 41 63 63 65  omation.TypeAcce
0e00: 6c 65 72 61 74 6f 72 73 22 29 0d 0a 24 78 6c 69  lerators")..$xli
0e10: 6e 71 20 3d 20 5b 52 65 66 6c 65 63 74 69 6f 6e  nq = [Reflection
0e20: 2e 41 73 73 65 6d 62 6c 79 5d 3a 3a 4c 6f 61 64  .Assembly]::Load
0e30: 28 22 53 79 73 74 65 6d 2e 58 6d 6c 2e 4c 69 6e  ("System.Xml.Lin
0e40: 71 2c 20 56 65 72 73 69 6f 6e 3d 33 2e 35 2e 30  q, Version=3.5.0
0e50: 2e 30 2c 20 43 75 6c 74 75 72 65 3d 6e 65 75 74  .0, Culture=neut
0e60: 72 61 6c 2c 20 50 75 62 6c 69 63 4b 65 79 54 6f  ral, PublicKeyTo
0e70: 6b 65 6e 3d 62 37 37 61 35 63 35 36 31 39 33 34  ken=b77a5c561934
0e80: 65 30 38 39 22 29 0d 0a 24 78 6c 69 6e 71 2e 47  e089")..$xlinq.G
0e90: 65 74 54 79 70 65 73 28 29 20 7c 20 3f 20 7b 20  etTypes() | ? { 
0ea0: 24 5f 2e 49 73 50 75 62 6c 69 63 20 2d 61 6e 64  $_.IsPublic -and
0eb0: 20 21 24 5f 2e 49 73 53 65 72 69 61 6c 69 7a 61   !$_.IsSerializa
0ec0: 62 6c 65 20 2d 61 6e 64 20 24 5f 2e 4e 61 6d 65  ble -and $_.Name
0ed0: 20 2d 6e 65 20 22 45 78 74 65 6e 73 69 6f 6e 73   -ne "Extensions
0ee0: 22 20 2d 61 6e 64 20 21 24 78 6c 72 38 72 3a 3a  " -and !$xlr8r::
0ef0: 47 65 74 5b 24 5f 2e 4e 61 6d 65 5d 20 7d 20 7c  Get[$_.Name] } |
0f00: 20 25 20 7b 0d 0a 20 20 24 78 6c 72 38 72 3a 3a   % {..  $xlr8r::
0f10: 41 64 64 28 20 24 5f 2e 4e 61 6d 65 2c 20 24 5f  Add( $_.Name, $_
0f20: 2e 46 75 6c 6c 4e 61 6d 65 20 29 0d 0a 7d 0d 0a  .FullName )..}..
0f30: 69 66 28 21 24 78 6c 72 38 72 3a 3a 47 65 74 5b  if(!$xlr8r::Get[
0f40: 22 53 74 61 63 6b 22 5d 29 20 7b 0d 0a 20 20 20  "Stack"]) {..   
0f50: 24 78 6c 72 38 72 3a 3a 41 64 64 28 20 22 53 74  $xlr8r::Add( "St
0f60: 61 63 6b 22 2c 20 22 53 79 73 74 65 6d 2e 43 6f  ack", "System.Co
0f70: 6c 6c 65 63 74 69 6f 6e 73 2e 47 65 6e 65 72 69  llections.Generi
0f80: 63 2e 53 74 61 63 6b 60 60 31 2c 20 53 79 73 74  c.Stack``1, Syst
0f90: 65 6d 2c 20 56 65 72 73 69 6f 6e 3d 32 2e 30 2e  em, Version=2.0.
0fa0: 30 2e 30 2c 20 43 75 6c 74 75 72 65 3d 6e 65 75  0.0, Culture=neu
0fb0: 74 72 61 6c 2c 20 50 75 62 6c 69 63 4b 65 79 54  tral, PublicKeyT
0fc0: 6f 6b 65 6e 3d 62 37 37 61 35 63 35 36 31 39 33  oken=b77a5c56193
0fd0: 34 65 30 38 39 22 20 29 0d 0a 7d 0d 0a 69 66 28  4e089" )..}..if(
0fe0: 21 24 78 6c 72 38 72 3a 3a 47 65 74 5b 22 44 69  !$xlr8r::Get["Di
0ff0: 63 74 69 6f 6e 61 72 79 22 5d 29 20 7b 0d 0a 20  ctionary"]) {.. 
1000: 20 20 24 78 6c 72 38 72 3a 3a 41 64 64 28 20 22    $xlr8r::Add( "
1010: 44 69 63 74 69 6f 6e 61 72 79 22 2c 20 22 53 79  Dictionary", "Sy
1020: 73 74 65 6d 2e 43 6f 6c 6c 65 63 74 69 6f 6e 73  stem.Collections
1030: 2e 47 65 6e 65 72 69 63 2e 44 69 63 74 69 6f 6e  .Generic.Diction
1040: 61 72 79 60 60 32 2c 20 6d 73 63 6f 72 6c 69 62  ary``2, mscorlib
1050: 2c 20 56 65 72 73 69 6f 6e 3d 32 2e 30 2e 30 2e  , Version=2.0.0.
1060: 30 2c 20 43 75 6c 74 75 72 65 3d 6e 65 75 74 72  0, Culture=neutr
1070: 61 6c 2c 20 50 75 62 6c 69 63 4b 65 79 54 6f 6b  al, PublicKeyTok
1080: 65 6e 3d 62 37 37 61 35 63 35 36 31 39 33 34 65  en=b77a5c561934e
1090: 30 38 39 22 20 29 0d 0a 7d 0d 0a 69 66 28 21 24  089" )..}..if(!$
10a0: 78 6c 72 38 72 3a 3a 47 65 74 5b 22 50 53 50 61  xlr8r::Get["PSPa
10b0: 72 73 65 72 22 5d 29 20 7b 0d 0a 20 20 20 24 78  rser"]) {..   $x
10c0: 6c 72 38 72 3a 3a 41 64 64 28 20 22 50 53 50 61  lr8r::Add( "PSPa
10d0: 72 73 65 72 22 2c 20 22 53 79 73 74 65 6d 2e 4d  rser", "System.M
10e0: 61 6e 61 67 65 6d 65 6e 74 2e 41 75 74 6f 6d 61  anagement.Automa
10f0: 74 69 6f 6e 2e 50 53 50 61 72 73 65 72 2c 20 53  tion.PSParser, S
1100: 79 73 74 65 6d 2e 4d 61 6e 61 67 65 6d 65 6e 74  ystem.Management
1110: 2e 41 75 74 6f 6d 61 74 69 6f 6e 2c 20 56 65 72  .Automation, Ver
1120: 73 69 6f 6e 3d 31 2e 30 2e 30 2e 30 2c 20 43 75  sion=1.0.0.0, Cu
1130: 6c 74 75 72 65 3d 6e 65 75 74 72 61 6c 2c 20 50  lture=neutral, P
1140: 75 62 6c 69 63 4b 65 79 54 6f 6b 65 6e 3d 33 31  ublicKeyToken=31
1150: 62 66 33 38 35 36 61 64 33 36 34 65 33 35 22 20  bf3856ad364e35" 
1160: 29 0d 0a 7d 0d 0a 0d 0a 0d 0a 0d 0a 66 69 6c 74  )..}........filt
1170: 65 72 20 46 6f 72 6d 61 74 2d 58 4d 4c 20 7b 0d  er Format-XML {.
1180: 0a 23 2e 53 79 6e 6f 70 73 69 73 0d 0a 23 20 20  .#.Synopsis..#  
1190: 20 50 72 65 74 74 79 2d 70 72 69 6e 74 20 66 6f   Pretty-print fo
11a0: 72 6d 61 74 74 65 64 20 58 4d 4c 20 73 6f 75 72  rmatted XML sour
11b0: 63 65 0d 0a 23 2e 44 65 73 63 72 69 70 74 69 6f  ce..#.Descriptio
11c0: 6e 0d 0a 23 20 20 20 52 75 6e 73 20 61 6e 20 58  n..#   Runs an X
11d0: 6d 6c 44 6f 63 75 6d 65 6e 74 20 74 68 72 6f 75  mlDocument throu
11e0: 67 68 20 61 6e 20 61 75 74 6f 2d 69 6e 64 65 6e  gh an auto-inden
11f0: 74 69 6e 67 20 58 6d 6c 57 72 69 74 65 72 0d 0a  ting XmlWriter..
1200: 23 2e 50 61 72 61 6d 65 74 65 72 20 58 6d 6c 0d  #.Parameter Xml.
1210: 0a 23 20 20 20 54 68 65 20 58 6d 6c 20 44 6f 63  .#   The Xml Doc
1220: 75 6d 65 6e 74 0d 0a 23 2e 50 61 72 61 6d 65 74  ument..#.Paramet
1230: 65 72 20 50 61 74 68 0d 0a 23 20 20 20 54 68 65  er Path..#   The
1240: 20 70 61 74 68 20 74 6f 20 61 6e 20 78 6d 6c 20   path to an xml 
1250: 64 6f 63 75 6d 65 6e 74 20 28 6f 6e 20 64 69 73  document (on dis
1260: 63 20 6f 72 20 61 6e 79 20 6f 74 68 65 72 20 63  c or any other c
1270: 6f 6e 74 65 6e 74 20 70 72 6f 76 69 64 65 72 29  ontent provider)
1280: 2e 0d 0a 23 2e 50 61 72 61 6d 65 74 65 72 20 49  ...#.Parameter I
1290: 6e 64 65 6e 74 0d 0a 23 20 20 20 54 68 65 20 69  ndent..#   The i
12a0: 6e 64 65 6e 74 20 6c 65 76 65 6c 20 28 64 65 66  ndent level (def
12b0: 61 75 6c 74 73 20 74 6f 20 32 20 73 70 61 63 65  aults to 2 space
12c0: 73 29 0d 0a 23 2e 45 78 61 6d 70 6c 65 0d 0a 23  s)..#.Example..#
12d0: 20 20 20 5b 78 6d 6c 5d 24 78 6d 6c 20 3d 20 67     [xml]$xml = g
12e0: 65 74 2d 63 6f 6e 74 65 6e 74 20 44 61 74 61 2e  et-content Data.
12f0: 78 6d 6c 0d 0a 23 20 20 20 43 3a 5c 50 53 3e 46  xml..#   C:\PS>F
1300: 6f 72 6d 61 74 2d 58 6d 6c 20 24 78 6d 6c 0d 0a  ormat-Xml $xml..
1310: 23 2e 45 78 61 6d 70 6c 65 0d 0a 23 20 20 20 67  #.Example..#   g
1320: 65 74 2d 63 6f 6e 74 65 6e 74 20 44 61 74 61 2e  et-content Data.
1330: 78 6d 6c 20 7c 20 46 6f 72 6d 61 74 2d 58 6d 6c  xml | Format-Xml
1340: 0d 0a 23 2e 45 78 61 6d 70 6c 65 0d 0a 23 20 20  ..#.Example..#  
1350: 20 46 6f 72 6d 61 74 2d 58 6d 6c 20 43 3a 5c 50   Format-Xml C:\P
1360: 53 5c 44 61 74 61 2e 78 6d 6c 0d 0a 23 2e 45 78  S\Data.xml..#.Ex
1370: 61 6d 70 6c 65 0d 0a 23 20 20 20 6c 73 20 2a 2e  ample..#   ls *.
1380: 78 6d 6c 20 7c 20 46 6f 72 6d 61 74 2d 58 6d 6c  xml | Format-Xml
1390: 0d 0a 23 0d 0a 50 61 72 61 6d 28 0d 0a 20 20 20  ..#..Param(..   
13a0: 5b 50 61 72 61 6d 65 74 65 72 28 50 6f 73 69 74  [Parameter(Posit
13b0: 69 6f 6e 3d 30 2c 20 4d 61 6e 64 61 74 6f 72 79  ion=0, Mandatory
13c0: 3d 24 74 72 75 65 2c 20 56 61 6c 75 65 46 72 6f  =$true, ValueFro
13d0: 6d 50 69 70 65 6c 69 6e 65 3d 24 74 72 75 65 2c  mPipeline=$true,
13e0: 20 50 61 72 61 6d 65 74 65 72 53 65 74 4e 61 6d   ParameterSetNam
13f0: 65 3d 22 44 6f 63 75 6d 65 6e 74 22 29 5d 0d 0a  e="Document")]..
1400: 20 20 20 5b 78 6d 6c 5d 24 58 6d 6c 0d 0a 2c 0d     [xml]$Xml..,.
1410: 0a 20 20 20 5b 50 61 72 61 6d 65 74 65 72 28 50  .   [Parameter(P
1420: 6f 73 69 74 69 6f 6e 3d 30 2c 20 4d 61 6e 64 61  osition=0, Manda
1430: 74 6f 72 79 3d 24 74 72 75 65 2c 20 56 61 6c 75  tory=$true, Valu
1440: 65 46 72 6f 6d 50 69 70 65 6c 69 6e 65 3d 24 74  eFromPipeline=$t
1450: 72 75 65 2c 20 56 61 6c 75 65 46 72 6f 6d 50 69  rue, ValueFromPi
1460: 70 65 6c 69 6e 65 42 79 50 72 6f 70 65 72 74 79  pelineByProperty
1470: 4e 61 6d 65 3d 24 74 72 75 65 2c 20 50 61 72 61  Name=$true, Para
1480: 6d 65 74 65 72 53 65 74 4e 61 6d 65 3d 22 46 69  meterSetName="Fi
1490: 6c 65 22 29 5d 0d 0a 20 20 20 5b 41 6c 69 61 73  le")]..   [Alias
14a0: 28 22 50 73 50 61 74 68 22 29 5d 0d 0a 20 20 20  ("PsPath")]..   
14b0: 5b 73 74 72 69 6e 67 5d 24 50 61 74 68 0d 0a 2c  [string]$Path..,
14c0: 0d 0a 20 20 20 5b 50 61 72 61 6d 65 74 65 72 28  ..   [Parameter(
14d0: 4d 61 6e 64 61 74 6f 72 79 3d 24 66 61 6c 73 65  Mandatory=$false
14e0: 29 5d 0d 0a 20 20 20 24 49 6e 64 65 6e 74 3d 32  )]..   $Indent=2
14f0: 0d 0a 29 0d 0a 20 20 20 23 23 20 4c 6f 61 64 20  ..)..   ## Load 
1500: 66 72 6f 6d 20 66 69 6c 65 2c 20 69 66 20 6e 65  from file, if ne
1510: 63 65 73 73 61 72 79 0d 0a 20 20 20 69 66 28 24  cessary..   if($
1520: 50 61 74 68 29 20 7b 20 5b 78 6d 6c 5d 24 78 6d  Path) { [xml]$xm
1530: 6c 20 3d 20 47 65 74 2d 43 6f 6e 74 65 6e 74 20  l = Get-Content 
1540: 24 50 61 74 68 20 7d 0d 0a 20 20 20 0d 0a 20 20  $Path }..   ..  
1550: 20 24 53 74 72 69 6e 67 57 72 69 74 65 72 20 3d   $StringWriter =
1560: 20 4e 65 77 2d 4f 62 6a 65 63 74 20 53 79 73 74   New-Object Syst
1570: 65 6d 2e 49 4f 2e 53 74 72 69 6e 67 57 72 69 74  em.IO.StringWrit
1580: 65 72 0d 0a 20 20 20 24 58 6d 6c 57 72 69 74 65  er..   $XmlWrite
1590: 72 20 3d 20 4e 65 77 2d 4f 62 6a 65 63 74 20 53  r = New-Object S
15a0: 79 73 74 65 6d 2e 58 6d 6c 2e 58 6d 6c 54 65 78  ystem.Xml.XmlTex
15b0: 74 57 72 69 74 65 72 20 24 53 74 72 69 6e 67 57  tWriter $StringW
15c0: 72 69 74 65 72 0d 0a 20 20 20 24 78 6d 6c 57 72  riter..   $xmlWr
15d0: 69 74 65 72 2e 46 6f 72 6d 61 74 74 69 6e 67 20  iter.Formatting 
15e0: 3d 20 22 69 6e 64 65 6e 74 65 64 22 0d 0a 20 20  = "indented"..  
15f0: 20 24 78 6d 6c 57 72 69 74 65 72 2e 49 6e 64 65   $xmlWriter.Inde
1600: 6e 74 61 74 69 6f 6e 20 3d 20 24 49 6e 64 65 6e  ntation = $Inden
1610: 74 0d 0a 20 20 20 24 78 6d 6c 2e 57 72 69 74 65  t..   $xml.Write
1620: 43 6f 6e 74 65 6e 74 54 6f 28 24 58 6d 6c 57 72  ContentTo($XmlWr
1630: 69 74 65 72 29 0d 0a 20 20 20 24 58 6d 6c 57 72  iter)..   $XmlWr
1640: 69 74 65 72 2e 46 6c 75 73 68 28 29 0d 0a 20 20  iter.Flush()..  
1650: 20 24 53 74 72 69 6e 67 57 72 69 74 65 72 2e 46   $StringWriter.F
1660: 6c 75 73 68 28 29 0d 0a 20 20 20 57 72 69 74 65  lush()..   Write
1670: 2d 4f 75 74 70 75 74 20 24 53 74 72 69 6e 67 57  -Output $StringW
1680: 72 69 74 65 72 2e 54 6f 53 74 72 69 6e 67 28 29  riter.ToString()
1690: 0d 0a 7d 0d 0a 53 65 74 2d 41 6c 69 61 73 20 66  ..}..Set-Alias f
16a0: 78 6d 6c 20 46 6f 72 6d 61 74 2d 58 6d 6c 20 2d  xml Format-Xml -
16b0: 45 41 20 30 0d 0a 0d 0a 66 75 6e 63 74 69 6f 6e  EA 0....function
16c0: 20 53 65 6c 65 63 74 2d 58 6d 6c 20 7b 0d 0a 23   Select-Xml {..#
16d0: 2e 53 79 6e 6f 70 73 69 73 0d 0a 23 20 20 54 68  .Synopsis..#  Th
16e0: 65 20 53 65 6c 65 63 74 2d 58 4d 4c 20 63 6d 64  e Select-XML cmd
16f0: 6c 65 74 20 6c 65 74 73 20 79 6f 75 20 75 73 65  let lets you use
1700: 20 58 50 61 74 68 20 71 75 65 72 69 65 73 20 74   XPath queries t
1710: 6f 20 73 65 61 72 63 68 20 66 6f 72 20 74 65 78  o search for tex
1720: 74 20 69 6e 20 58 4d 4c 20 73 74 72 69 6e 67 73  t in XML strings
1730: 20 61 6e 64 20 64 6f 63 75 6d 65 6e 74 73 2e 20   and documents. 
1740: 45 6e 74 65 72 20 61 6e 20 58 50 61 74 68 20 71  Enter an XPath q
1750: 75 65 72 79 2c 20 61 6e 64 20 75 73 65 20 74 68  uery, and use th
1760: 65 20 43 6f 6e 74 65 6e 74 2c 20 50 61 74 68 2c  e Content, Path,
1770: 20 6f 72 20 58 6d 6c 20 70 61 72 61 6d 65 74 65   or Xml paramete
1780: 72 20 74 6f 20 73 70 65 63 69 66 79 20 74 68 65  r to specify the
1790: 20 58 4d 4c 20 74 6f 20 62 65 20 73 65 61 72 63   XML to be searc
17a0: 68 65 64 2e 0d 0a 23 2e 44 65 73 63 72 69 70 74  hed...#.Descript
17b0: 69 6f 6e 0d 0a 23 20 20 49 6d 70 72 6f 76 65 73  ion..#  Improves
17c0: 20 6f 76 65 72 20 74 68 65 20 62 75 69 6c 74 2d   over the built-
17d0: 69 6e 20 53 65 6c 65 63 74 2d 58 4d 4c 20 62 79  in Select-XML by
17e0: 20 6c 65 76 65 72 61 67 69 6e 67 20 52 65 6d 6f   leveraging Remo
17f0: 76 65 2d 58 6d 6c 4e 61 6d 65 73 70 61 63 65 20  ve-XmlNamespace 
1800: 74 6f 20 70 72 6f 76 69 64 65 20 61 20 2d 52 65  to provide a -Re
1810: 6d 6f 76 65 4e 61 6d 65 73 70 61 63 65 20 70 61  moveNamespace pa
1820: 72 61 6d 65 74 65 72 20 2d 2d 20 69 66 20 69 74  rameter -- if it
1830: 27 73 20 73 75 70 70 6c 69 65 64 2c 20 61 6c 6c  's supplied, all
1840: 20 6f 66 20 74 68 65 20 6e 61 6d 65 73 70 61 63   of the namespac
1850: 65 20 64 65 63 6c 61 72 61 74 69 6f 6e 73 20 61  e declarations a
1860: 6e 64 20 70 72 65 66 69 78 65 73 20 61 72 65 20  nd prefixes are 
1870: 72 65 6d 6f 76 65 64 20 66 72 6f 6d 20 61 6c 6c  removed from all
1880: 20 58 4d 4c 20 6e 6f 64 65 73 20 28 62 79 20 61   XML nodes (by a
1890: 6e 20 58 53 4c 20 74 72 61 6e 73 66 6f 72 6d 29  n XSL transform)
18a0: 20 62 65 66 6f 72 65 20 73 65 61 72 63 68 69 6e   before searchin
18b0: 67 2e 20 20 0d 0a 23 20 20 0d 0a 23 20 20 48 6f  g.  ..#  ..#  Ho
18c0: 77 65 76 65 72 2c 20 6f 6e 6c 79 20 72 61 77 20  wever, only raw 
18d0: 58 6d 6c 4e 6f 64 65 73 20 61 72 65 20 72 65 74  XmlNodes are ret
18e0: 75 72 6e 65 64 20 66 72 6f 6d 20 74 68 69 73 20  urned from this 
18f0: 66 75 6e 63 74 69 6f 6e 2c 20 73 6f 20 74 68 65  function, so the
1900: 20 6f 75 74 70 75 74 20 69 73 6e 27 74 20 63 75   output isn't cu
1910: 72 72 65 6e 74 6c 79 20 63 6f 6d 70 61 74 69 62  rrently compatib
1920: 6c 65 20 77 69 74 68 20 74 68 65 20 62 75 69 6c  le with the buil
1930: 74 20 69 6e 20 53 65 6c 65 63 74 2d 58 6d 6c 2c  t in Select-Xml,
1940: 20 62 75 74 20 69 73 20 65 71 75 69 76 61 6c 65   but is equivale
1950: 6e 74 20 74 6f 20 75 73 69 6e 67 20 53 65 6c 65  nt to using Sele
1960: 63 74 2d 58 6d 6c 20 2e 2e 2e 20 7c 20 53 65 6c  ct-Xml ... | Sel
1970: 65 63 74 2d 4f 62 6a 65 63 74 20 2d 45 78 70 61  ect-Object -Expa
1980: 6e 64 20 4e 6f 64 65 0d 0a 23 0d 0a 23 20 20 41  nd Node..#..#  A
1990: 6c 73 6f 20 6e 6f 74 65 20 74 68 61 74 20 69 66  lso note that if
19a0: 20 74 68 65 20 2d 52 65 6d 6f 76 65 4e 61 6d 65   the -RemoveName
19b0: 73 70 61 63 65 20 73 77 69 74 63 68 20 69 73 20  space switch is 
19c0: 73 75 70 70 6c 69 65 64 20 74 68 65 20 72 65 74  supplied the ret
19d0: 75 72 6e 65 64 20 72 65 73 75 6c 74 73 20 2a 77  urned results *w
19e0: 69 6c 6c 20 6e 6f 74 2a 20 68 61 76 65 20 6e 61  ill not* have na
19f0: 6d 65 73 70 61 63 65 73 20 69 6e 20 74 68 65 6d  mespaces in them
1a00: 2c 20 65 76 65 6e 20 69 66 20 74 68 65 20 69 6e  , even if the in
1a10: 70 75 74 20 58 4d 4c 20 64 69 64 2c 20 61 6e 64  put XML did, and
1a20: 20 65 6e 74 69 74 69 65 73 20 67 65 74 20 65 78   entities get ex
1a30: 70 61 6e 64 65 64 20 61 75 74 6f 6d 61 74 69 63  panded automatic
1a40: 61 6c 6c 79 2e 0d 0a 23 2e 50 61 72 61 6d 65 74  ally...#.Paramet
1a50: 65 72 20 43 6f 6e 74 65 6e 74 0d 0a 23 20 20 53  er Content..#  S
1a60: 70 65 63 69 66 69 65 73 20 61 20 73 74 72 69 6e  pecifies a strin
1a70: 67 20 74 68 61 74 20 63 6f 6e 74 61 69 6e 73 20  g that contains 
1a80: 74 68 65 20 58 4d 4c 20 74 6f 20 73 65 61 72 63  the XML to searc
1a90: 68 2e 20 59 6f 75 20 63 61 6e 20 61 6c 73 6f 20  h. You can also 
1aa0: 70 69 70 65 20 73 74 72 69 6e 67 73 20 74 6f 20  pipe strings to 
1ab0: 53 65 6c 65 63 74 2d 58 4d 4c 2e 0d 0a 23 2e 50  Select-XML...#.P
1ac0: 61 72 61 6d 65 74 65 72 20 4e 61 6d 65 73 70 61  arameter Namespa
1ad0: 63 65 0d 0a 23 20 20 20 53 70 65 63 69 66 69 65  ce..#   Specifie
1ae0: 73 20 61 20 68 61 73 68 20 74 61 62 6c 65 20 6f  s a hash table o
1af0: 66 20 74 68 65 20 6e 61 6d 65 73 70 61 63 65 73  f the namespaces
1b00: 20 75 73 65 64 20 69 6e 20 74 68 65 20 58 4d 4c   used in the XML
1b10: 2e 20 55 73 65 20 74 68 65 20 66 6f 72 6d 61 74  . Use the format
1b20: 20 40 7b 3c 6e 61 6d 65 73 70 61 63 65 4e 61 6d   @{<namespaceNam
1b30: 65 3e 20 3d 20 3c 6e 61 6d 65 73 70 61 63 65 55  e> = <namespaceU
1b40: 72 69 3e 7d 2e 0d 0a 23 2e 50 61 72 61 6d 65 74  ri>}...#.Paramet
1b50: 65 72 20 50 61 74 68 0d 0a 23 20 20 20 53 70 65  er Path..#   Spe
1b60: 63 69 66 69 65 73 20 74 68 65 20 70 61 74 68 20  cifies the path 
1b70: 61 6e 64 20 66 69 6c 65 20 6e 61 6d 65 73 20 6f  and file names o
1b80: 66 20 74 68 65 20 58 4d 4c 20 66 69 6c 65 73 20  f the XML files 
1b90: 74 6f 20 73 65 61 72 63 68 2e 20 20 57 69 6c 64  to search.  Wild
1ba0: 63 61 72 64 73 20 61 72 65 20 70 65 72 6d 69 74  cards are permit
1bb0: 74 65 64 2e 0d 0a 23 2e 50 61 72 61 6d 65 74 65  ted...#.Paramete
1bc0: 72 20 58 6d 6c 0d 0a 23 20 20 53 70 65 63 69 66  r Xml..#  Specif
1bd0: 69 65 73 20 6f 6e 65 20 6f 72 20 6d 6f 72 65 20  ies one or more 
1be0: 58 4d 4c 20 6e 6f 64 65 73 20 74 6f 20 73 65 61  XML nodes to sea
1bf0: 72 63 68 2e 0d 0a 23 2e 50 61 72 61 6d 65 74 65  rch...#.Paramete
1c00: 72 20 58 50 61 74 68 0d 0a 23 20 20 53 70 65 63  r XPath..#  Spec
1c10: 69 66 69 65 73 20 61 6e 20 58 50 61 74 68 20 73  ifies an XPath s
1c20: 65 61 72 63 68 20 71 75 65 72 79 2e 20 54 68 65  earch query. The
1c30: 20 71 75 65 72 79 20 6c 61 6e 67 75 61 67 65 20   query language 
1c40: 69 73 20 63 61 73 65 2d 73 65 6e 73 69 74 69 76  is case-sensitiv
1c50: 65 2e 20 54 68 69 73 20 70 61 72 61 6d 65 74 65  e. This paramete
1c60: 72 20 69 73 20 72 65 71 75 69 72 65 64 2e 0d 0a  r is required...
1c70: 23 2e 50 61 72 61 6d 65 74 65 72 20 52 65 6d 6f  #.Parameter Remo
1c80: 76 65 4e 61 6d 65 73 70 61 63 65 0d 0a 23 20 20  veNamespace..#  
1c90: 41 6c 6c 6f 77 73 20 74 68 65 20 65 78 65 63 75  Allows the execu
1ca0: 74 69 6f 6e 20 6f 66 20 58 50 61 74 68 20 71 75  tion of XPath qu
1cb0: 65 72 69 65 73 20 77 69 74 68 6f 75 74 20 6e 61  eries without na
1cc0: 6d 65 73 70 61 63 65 20 71 75 61 6c 69 66 69 65  mespace qualifie
1cd0: 72 73 2e 20 0d 0a 23 20 20 0d 0a 23 20 20 49 66  rs. ..#  ..#  If
1ce0: 20 79 6f 75 20 73 70 65 63 69 66 79 20 74 68 65   you specify the
1cf0: 20 2d 52 65 6d 6f 76 65 4e 61 6d 65 73 70 61 63   -RemoveNamespac
1d00: 65 20 73 77 69 74 63 68 2c 20 61 6c 6c 20 6e 61  e switch, all na
1d10: 6d 65 73 70 61 63 65 20 64 65 63 6c 61 72 61 74  mespace declarat
1d20: 69 6f 6e 73 20 61 6e 64 20 70 72 65 66 69 78 65  ions and prefixe
1d30: 73 20 61 72 65 20 61 63 74 75 61 6c 6c 79 20 72  s are actually r
1d40: 65 6d 6f 76 65 64 20 66 72 6f 6d 20 74 68 65 20  emoved from the 
1d50: 58 6d 6c 20 62 65 66 6f 72 65 20 74 68 65 20 58  Xml before the X
1d60: 50 61 74 68 20 73 65 61 72 63 68 20 71 75 65 72  Path search quer
1d70: 79 20 69 73 20 65 76 61 6c 75 61 74 65 64 2c 20  y is evaluated, 
1d80: 61 6e 64 20 79 6f 75 72 20 58 50 61 74 68 20 71  and your XPath q
1d90: 75 65 72 79 20 73 68 6f 75 6c 64 20 74 68 65 72  uery should ther
1da0: 65 66 6f 72 65 20 4e 4f 54 20 63 6f 6e 74 61 69  efore NOT contai
1db0: 6e 20 61 6e 79 20 6e 61 6d 65 73 70 61 63 65 20  n any namespace 
1dc0: 70 72 65 66 69 78 65 73 2e 0d 0a 23 20 0d 0a 23  prefixes...# ..#
1dd0: 20 20 4e 6f 74 65 20 74 68 61 74 20 74 68 69 73    Note that this
1de0: 20 6d 65 61 6e 73 20 74 68 61 74 20 74 68 65 20   means that the 
1df0: 72 65 74 75 72 6e 65 64 20 72 65 73 75 6c 74 73  returned results
1e00: 20 2a 77 69 6c 6c 20 6e 6f 74 2a 20 68 61 76 65   *will not* have
1e10: 20 6e 61 6d 65 73 70 61 63 65 73 20 69 6e 20 74   namespaces in t
1e20: 68 65 6d 2c 20 65 76 65 6e 20 69 66 20 74 68 65  hem, even if the
1e30: 20 69 6e 70 75 74 20 58 4d 4c 20 64 69 64 2c 20   input XML did, 
1e40: 61 6e 64 20 65 6e 74 69 74 69 65 73 20 67 65 74  and entities get
1e50: 20 65 78 70 61 6e 64 65 64 20 61 75 74 6f 6d 61   expanded automa
1e60: 74 69 63 61 6c 6c 79 2e 0d 0a 5b 43 6d 64 6c 65  tically...[Cmdle
1e70: 74 42 69 6e 64 69 6e 67 28 44 65 66 61 75 6c 74  tBinding(Default
1e80: 50 61 72 61 6d 65 74 65 72 53 65 74 4e 61 6d 65  ParameterSetName
1e90: 3d 22 58 6d 6c 22 29 5d 0d 0a 50 41 52 41 4d 28  ="Xml")]..PARAM(
1ea0: 0d 0a 20 20 20 5b 50 61 72 61 6d 65 74 65 72 28  ..   [Parameter(
1eb0: 50 6f 73 69 74 69 6f 6e 3d 31 2c 50 61 72 61 6d  Position=1,Param
1ec0: 65 74 65 72 53 65 74 4e 61 6d 65 3d 22 50 61 74  eterSetName="Pat
1ed0: 68 22 2c 4d 61 6e 64 61 74 6f 72 79 3d 24 74 72  h",Mandatory=$tr
1ee0: 75 65 2c 56 61 6c 75 65 46 72 6f 6d 50 69 70 65  ue,ValueFromPipe
1ef0: 6c 69 6e 65 42 79 50 72 6f 70 65 72 74 79 4e 61  lineByPropertyNa
1f00: 6d 65 3d 24 74 72 75 65 29 5d 0d 0a 20 20 20 5b  me=$true)]..   [
1f10: 56 61 6c 69 64 61 74 65 4e 6f 74 4e 75 6c 6c 4f  ValidateNotNullO
1f20: 72 45 6d 70 74 79 28 29 5d 0d 0a 20 20 20 5b 41  rEmpty()]..   [A
1f30: 6c 69 61 73 28 22 50 53 50 61 74 68 22 29 5d 0d  lias("PSPath")].
1f40: 0a 20 20 20 5b 53 74 72 69 6e 67 5b 5d 5d 24 50  .   [String[]]$P
1f50: 61 74 68 0d 0a 2c 0d 0a 20 20 20 5b 50 61 72 61  ath..,..   [Para
1f60: 6d 65 74 65 72 28 50 6f 73 69 74 69 6f 6e 3d 31  meter(Position=1
1f70: 2c 50 61 72 61 6d 65 74 65 72 53 65 74 4e 61 6d  ,ParameterSetNam
1f80: 65 3d 22 58 6d 6c 22 2c 4d 61 6e 64 61 74 6f 72  e="Xml",Mandator
1f90: 79 3d 24 74 72 75 65 2c 56 61 6c 75 65 46 72 6f  y=$true,ValueFro
1fa0: 6d 50 69 70 65 6c 69 6e 65 3d 24 74 72 75 65 2c  mPipeline=$true,
1fb0: 56 61 6c 75 65 46 72 6f 6d 50 69 70 65 6c 69 6e  ValueFromPipelin
1fc0: 65 42 79 50 72 6f 70 65 72 74 79 4e 61 6d 65 3d  eByPropertyName=
1fd0: 24 74 72 75 65 29 5d 0d 0a 20 20 20 5b 56 61 6c  $true)]..   [Val
1fe0: 69 64 61 74 65 4e 6f 74 4e 75 6c 6c 4f 72 45 6d  idateNotNullOrEm
1ff0: 70 74 79 28 29 5d 0d 0a 20 20 20 5b 41 6c 69 61  pty()]..   [Alia
2000: 73 28 22 4e 6f 64 65 22 29 5d 0d 0a 20 20 20 5b  s("Node")]..   [
2010: 53 79 73 74 65 6d 2e 58 6d 6c 2e 58 6d 6c 4e 6f  System.Xml.XmlNo
2020: 64 65 5b 5d 5d 24 58 6d 6c 0d 0a 2c 0d 0a 20 20  de[]]$Xml..,..  
2030: 20 5b 50 61 72 61 6d 65 74 65 72 28 50 61 72 61   [Parameter(Para
2040: 6d 65 74 65 72 53 65 74 4e 61 6d 65 3d 22 43 6f  meterSetName="Co
2050: 6e 74 65 6e 74 22 2c 4d 61 6e 64 61 74 6f 72 79  ntent",Mandatory
2060: 3d 24 74 72 75 65 2c 56 61 6c 75 65 46 72 6f 6d  =$true,ValueFrom
2070: 50 69 70 65 6c 69 6e 65 3d 24 74 72 75 65 29 5d  Pipeline=$true)]
2080: 0d 0a 20 20 20 5b 56 61 6c 69 64 61 74 65 4e 6f  ..   [ValidateNo
2090: 74 4e 75 6c 6c 4f 72 45 6d 70 74 79 28 29 5d 0d  tNullOrEmpty()].
20a0: 0a 20 20 20 5b 53 74 72 69 6e 67 5b 5d 5d 24 43  .   [String[]]$C
20b0: 6f 6e 74 65 6e 74 0d 0a 2c 0d 0a 20 20 20 5b 50  ontent..,..   [P
20c0: 61 72 61 6d 65 74 65 72 28 50 6f 73 69 74 69 6f  arameter(Positio
20d0: 6e 3d 30 2c 4d 61 6e 64 61 74 6f 72 79 3d 24 74  n=0,Mandatory=$t
20e0: 72 75 65 2c 56 61 6c 75 65 46 72 6f 6d 50 69 70  rue,ValueFromPip
20f0: 65 6c 69 6e 65 3d 24 66 61 6c 73 65 29 5d 0d 0a  eline=$false)]..
2100: 20 20 20 5b 56 61 6c 69 64 61 74 65 4e 6f 74 4e     [ValidateNotN
2110: 75 6c 6c 4f 72 45 6d 70 74 79 28 29 5d 0d 0a 20  ullOrEmpty()].. 
2120: 20 20 5b 41 6c 69 61 73 28 22 51 75 65 72 79 22    [Alias("Query"
2130: 29 5d 0d 0a 20 20 20 5b 53 74 72 69 6e 67 5b 5d  )]..   [String[]
2140: 5d 24 58 50 61 74 68 0d 0a 2c 0d 0a 20 20 20 5b  ]$XPath..,..   [
2150: 50 61 72 61 6d 65 74 65 72 28 4d 61 6e 64 61 74  Parameter(Mandat
2160: 6f 72 79 3d 24 66 61 6c 73 65 29 5d 0d 0a 20 20  ory=$false)]..  
2170: 20 5b 56 61 6c 69 64 61 74 65 4e 6f 74 4e 75 6c   [ValidateNotNul
2180: 6c 4f 72 45 6d 70 74 79 28 29 5d 0d 0a 20 20 20  lOrEmpty()]..   
2190: 5b 48 61 73 68 74 61 62 6c 65 5d 24 4e 61 6d 65  [Hashtable]$Name
21a0: 73 70 61 63 65 0d 0a 2c 0d 0a 20 20 20 5b 53 77  space..,..   [Sw
21b0: 69 74 63 68 5d 24 52 65 6d 6f 76 65 4e 61 6d 65  itch]$RemoveName
21c0: 73 70 61 63 65 0d 0a 29 0d 0a 42 45 47 49 4e 20  space..)..BEGIN 
21d0: 7b 0d 0a 20 20 20 66 75 6e 63 74 69 6f 6e 20 53  {..   function S
21e0: 65 6c 65 63 74 2d 4e 6f 64 65 20 7b 0d 0a 20 20  elect-Node {..  
21f0: 20 50 41 52 41 4d 28 5b 58 6d 6c 2e 58 6d 6c 4e   PARAM([Xml.XmlN
2200: 6f 64 65 5d 24 58 6d 6c 2c 20 5b 53 74 72 69 6e  ode]$Xml, [Strin
2210: 67 5b 5d 5d 24 58 50 61 74 68 2c 20 24 4e 61 6d  g[]]$XPath, $Nam
2220: 65 73 70 61 63 65 4d 61 6e 61 67 65 72 29 0d 0a  espaceManager)..
2230: 20 20 20 42 45 47 49 4e 20 7b 0d 0a 20 20 20 20     BEGIN {..    
2240: 20 20 66 6f 72 65 61 63 68 28 24 6e 6f 64 65 20    foreach($node 
2250: 69 6e 20 24 78 6d 6c 29 20 7b 0d 0a 20 20 20 20  in $xml) {..    
2260: 20 20 20 20 20 69 66 28 24 4e 61 6d 65 73 70 61       if($Namespa
2270: 63 65 4d 61 6e 61 67 65 72 20 2d 69 73 20 5b 48  ceManager -is [H
2280: 61 73 68 74 61 62 6c 65 5d 29 20 7b 0d 0a 20 20  ashtable]) {..  
2290: 20 20 20 20 20 20 20 20 20 20 24 6e 73 4d 61 6e            $nsMan
22a0: 61 67 65 72 20 3d 20 6e 65 77 2d 6f 62 6a 65 63  ager = new-objec
22b0: 74 20 53 79 73 74 65 6d 2e 58 6d 6c 2e 58 6d 6c  t System.Xml.Xml
22c0: 4e 61 6d 65 73 70 61 63 65 4d 61 6e 61 67 65 72  NamespaceManager
22d0: 20 24 6e 6f 64 65 2e 4e 61 6d 65 54 61 62 6c 65   $node.NameTable
22e0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 66 6f  ..            fo
22f0: 72 65 61 63 68 28 24 6e 73 20 69 6e 20 24 4e 61  reach($ns in $Na
2300: 6d 65 73 70 61 63 65 2e 47 65 74 45 6e 75 6d 65  mespace.GetEnume
2310: 72 61 74 6f 72 28 29 29 20 7b 0d 0a 20 20 20 20  rator()) {..    
2320: 20 20 20 20 20 20 20 20 20 20 20 24 6e 73 4d 61             $nsMa
2330: 6e 61 67 65 72 2e 41 64 64 4e 61 6d 65 73 70 61  nager.AddNamespa
2340: 63 65 28 20 24 6e 73 2e 4b 65 79 2c 20 24 6e 73  ce( $ns.Key, $ns
2350: 2e 56 61 6c 75 65 20 29 0d 0a 20 20 20 20 20 20  .Value )..      
2360: 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..       
2370: 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 66 6f    }..         fo
2380: 72 65 61 63 68 28 24 70 61 74 68 20 69 6e 20 24  reach($path in $
2390: 78 70 61 74 68 29 20 7b 0d 0a 20 20 20 20 20 20  xpath) {..      
23a0: 20 20 20 20 20 20 24 6e 6f 64 65 2e 53 65 6c 65        $node.Sele
23b0: 63 74 4e 6f 64 65 73 28 24 70 61 74 68 2c 20 24  ctNodes($path, $
23c0: 4e 61 6d 65 73 70 61 63 65 4d 61 6e 61 67 65 72  NamespaceManager
23d0: 29 0d 0a 20 20 20 7d 20 20 7d 20 20 7d 20 20 7d  )..   }  }  }  }
23e0: 0d 0a 0d 0a 20 20 20 5b 54 65 78 74 2e 53 74 72  ....   [Text.Str
23f0: 69 6e 67 42 75 69 6c 64 65 72 5d 24 58 6d 6c 43  ingBuilder]$XmlC
2400: 6f 6e 74 65 6e 74 20 3d 20 5b 53 74 72 69 6e 67  ontent = [String
2410: 5d 3a 3a 45 6d 70 74 79 0d 0a 7d 0d 0a 0d 0a 50  ]::Empty..}....P
2420: 52 4f 43 45 53 53 20 7b 0d 0a 20 20 20 24 4e 53  ROCESS {..   $NS
2430: 4d 20 3d 20 24 4e 75 6c 6c 3b 20 69 66 28 24 50  M = $Null; if($P
2440: 53 42 6f 75 6e 64 50 61 72 61 6d 65 74 65 72 73  SBoundParameters
2450: 2e 43 6f 6e 74 61 69 6e 73 4b 65 79 28 22 4e 61  .ContainsKey("Na
2460: 6d 65 73 70 61 63 65 22 29 29 20 7b 20 24 4e 53  mespace")) { $NS
2470: 4d 20 3d 20 24 4e 61 6d 65 73 70 61 63 65 20 7d  M = $Namespace }
2480: 0d 0a 0d 0a 20 20 20 73 77 69 74 63 68 28 24 50  ....   switch($P
2490: 53 43 6d 64 6c 65 74 2e 50 61 72 61 6d 65 74 65  SCmdlet.Paramete
24a0: 72 53 65 74 4e 61 6d 65 29 20 7b 0d 0a 20 20 20  rSetName) {..   
24b0: 20 20 20 22 43 6f 6e 74 65 6e 74 22 20 7b 0d 0a     "Content" {..
24c0: 20 20 20 20 20 20 20 20 20 24 6e 75 6c 6c 20 3d           $null =
24d0: 20 24 58 6d 6c 43 6f 6e 74 65 6e 74 2e 41 70 70   $XmlContent.App
24e0: 65 6e 64 4c 69 6e 65 28 20 24 43 6f 6e 74 65 6e  endLine( $Conten
24f0: 74 20 2d 4a 6f 69 6e 20 22 60 6e 22 20 29 0d 0a  t -Join "`n" )..
2500: 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 22        }..      "
2510: 50 61 74 68 22 20 7b 0d 0a 20 20 20 20 20 20 20  Path" {..       
2520: 20 20 66 6f 72 65 61 63 68 28 24 66 69 6c 65 20    foreach($file 
2530: 69 6e 20 47 65 74 2d 43 68 69 6c 64 49 74 65 6d  in Get-ChildItem
2540: 20 24 50 61 74 68 29 20 7b 0d 0a 20 20 20 20 20   $Path) {..     
2550: 20 20 20 20 20 20 20 5b 58 6d 6c 5d 24 58 6d 6c         [Xml]$Xml
2560: 20 3d 20 47 65 74 2d 43 6f 6e 74 65 6e 74 20 24   = Get-Content $
2570: 66 69 6c 65 0d 0a 20 20 20 20 20 20 20 20 20 20  file..          
2580: 20 20 69 66 28 24 52 65 6d 6f 76 65 4e 61 6d 65    if($RemoveName
2590: 73 70 61 63 65 29 20 7b 0d 0a 20 20 20 20 20 20  space) {..      
25a0: 20 20 20 20 20 20 20 20 20 24 58 6d 6c 20 3d 20           $Xml = 
25b0: 52 65 6d 6f 76 65 2d 58 6d 6c 4e 61 6d 65 73 70  Remove-XmlNamesp
25c0: 61 63 65 20 24 58 6d 6c 0d 0a 20 20 20 20 20 20  ace $Xml..      
25d0: 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..       
25e0: 20 20 20 20 20 53 65 6c 65 63 74 2d 4e 6f 64 65       Select-Node
25f0: 20 24 58 6d 6c 20 24 58 50 61 74 68 20 20 24 4e   $Xml $XPath  $N
2600: 53 4d 0d 0a 20 20 20 20 20 20 20 20 20 7d 0d 0a  SM..         }..
2610: 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 22        }..      "
2620: 58 6d 6c 22 20 7b 0d 0a 20 20 20 20 20 20 20 20  Xml" {..        
2630: 20 66 6f 72 65 61 63 68 28 24 6e 6f 64 65 20 69   foreach($node i
2640: 6e 20 24 58 6d 6c 29 20 7b 0d 0a 20 20 20 20 20  n $Xml) {..     
2650: 20 20 20 20 20 20 20 69 66 28 24 52 65 6d 6f 76         if($Remov
2660: 65 4e 61 6d 65 73 70 61 63 65 29 20 7b 0d 0a 20  eNamespace) {.. 
2670: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 24 6e                $n
2680: 6f 64 65 20 3d 20 52 65 6d 6f 76 65 2d 58 6d 6c  ode = Remove-Xml
2690: 4e 61 6d 65 73 70 61 63 65 20 24 6e 6f 64 65 0d  Namespace $node.
26a0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  .            }..
26b0: 20 20 20 20 20 20 20 20 20 20 20 20 53 65 6c 65              Sele
26c0: 63 74 2d 4e 6f 64 65 20 24 6e 6f 64 65 20 24 58  ct-Node $node $X
26d0: 50 61 74 68 20 24 4e 53 4d 0d 0a 20 20 20 20 20  Path $NSM..     
26e0: 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 7d 0d 0a      }..      }..
26f0: 20 20 20 7d 0d 0a 7d 0d 0a 45 4e 44 20 7b 0d 0a     }..}..END {..
2700: 20 20 20 69 66 28 24 50 53 43 6d 64 6c 65 74 2e     if($PSCmdlet.
2710: 50 61 72 61 6d 65 74 65 72 53 65 74 4e 61 6d 65  ParameterSetName
2720: 20 2d 65 71 20 22 43 6f 6e 74 65 6e 74 22 29 20   -eq "Content") 
2730: 7b 0d 0a 20 20 20 20 20 20 5b 58 6d 6c 5d 24 58  {..      [Xml]$X
2740: 6d 6c 20 3d 20 24 58 6d 6c 43 6f 6e 74 65 6e 74  ml = $XmlContent
2750: 2e 54 6f 53 74 72 69 6e 67 28 29 0d 0a 20 20 20  .ToString()..   
2760: 20 20 20 69 66 28 24 52 65 6d 6f 76 65 4e 61 6d     if($RemoveNam
2770: 65 73 70 61 63 65 29 20 7b 0d 0a 20 20 20 20 20  espace) {..     
2780: 20 20 20 20 24 58 6d 6c 20 3d 20 52 65 6d 6f 76      $Xml = Remov
2790: 65 2d 58 6d 6c 4e 61 6d 65 73 70 61 63 65 20 24  e-XmlNamespace $
27a0: 58 6d 6c 0d 0a 20 20 20 20 20 20 7d 0d 0a 20 20  Xml..      }..  
27b0: 20 20 20 20 53 65 6c 65 63 74 2d 4e 6f 64 65 20      Select-Node 
27c0: 24 58 6d 6c 20 24 58 50 61 74 68 20 20 24 4e 53  $Xml $XPath  $NS
27d0: 4d 0d 0a 20 20 20 7d 0d 0a 7d 0d 0a 0d 0a 7d 0d  M..   }..}....}.
27e0: 0a 53 65 74 2d 41 6c 69 61 73 20 73 6c 78 6d 6c  .Set-Alias slxml
27f0: 20 53 65 6c 65 63 74 2d 58 6d 6c 20 2d 45 41 20   Select-Xml -EA 
2800: 30 0d 0a 0d 0a 66 75 6e 63 74 69 6f 6e 20 43 6f  0....function Co
2810: 6e 76 65 72 74 2d 4e 6f 64 65 20 7b 0d 0a 23 2e  nvert-Node {..#.
2820: 53 79 6e 6f 70 73 69 73 20 0d 0a 23 20 43 6f 6e  Synopsis ..# Con
2830: 76 65 72 74 20 61 20 73 69 6e 67 6c 65 20 58 4d  vert a single XM
2840: 4c 20 4e 6f 64 65 20 76 69 61 20 58 53 4c 20 73  L Node via XSL s
2850: 74 79 6c 65 73 68 65 65 74 73 0d 0a 70 61 72 61  tylesheets..para
2860: 6d 28 0d 0a 5b 50 61 72 61 6d 65 74 65 72 28 4d  m(..[Parameter(M
2870: 61 6e 64 61 74 6f 72 79 3d 24 74 72 75 65 2c 56  andatory=$true,V
2880: 61 6c 75 65 46 72 6f 6d 50 69 70 65 6c 69 6e 65  alueFromPipeline
2890: 3d 24 74 72 75 65 29 5d 0d 0a 5b 53 79 73 74 65  =$true)]..[Syste
28a0: 6d 2e 58 6d 6c 2e 58 6d 6c 52 65 61 64 65 72 5d  m.Xml.XmlReader]
28b0: 24 58 6d 6c 52 65 61 64 65 72 2c 0d 0a 5b 50 61  $XmlReader,..[Pa
28c0: 72 61 6d 65 74 65 72 28 50 6f 73 69 74 69 6f 6e  rameter(Position
28d0: 3d 31 2c 4d 61 6e 64 61 74 6f 72 79 3d 24 74 72  =1,Mandatory=$tr
28e0: 75 65 2c 56 61 6c 75 65 46 72 6f 6d 50 69 70 65  ue,ValueFromPipe
28f0: 6c 69 6e 65 3d 24 66 61 6c 73 65 29 5d 0d 0a 5b  line=$false)]..[
2900: 53 79 73 74 65 6d 2e 58 6d 6c 2e 58 73 6c 2e 58  System.Xml.Xsl.X
2910: 73 6c 43 6f 6d 70 69 6c 65 64 54 72 61 6e 73 66  slCompiledTransf
2920: 6f 72 6d 5d 24 53 74 79 6c 65 53 68 65 65 74 0d  orm]$StyleSheet.
2930: 0a 29 20 0d 0a 50 52 4f 43 45 53 53 20 7b 0d 0a  .) ..PROCESS {..
2940: 20 20 20 24 6f 75 74 70 75 74 20 3d 20 4e 65 77     $output = New
2950: 2d 4f 62 6a 65 63 74 20 49 4f 2e 53 74 72 69 6e  -Object IO.Strin
2960: 67 57 72 69 74 65 72 0d 0a 20 20 20 24 53 74 79  gWriter..   $Sty
2970: 6c 65 53 68 65 65 74 2e 54 72 61 6e 73 66 6f 72  leSheet.Transfor
2980: 6d 28 20 24 58 6d 6c 52 65 61 64 65 72 2c 20 24  m( $XmlReader, $
2990: 6e 75 6c 6c 2c 20 24 6f 75 74 70 75 74 20 29 0d  null, $output ).
29a0: 0a 20 20 20 57 72 69 74 65 2d 4f 75 74 70 75 74  .   Write-Output
29b0: 20 24 6f 75 74 70 75 74 2e 54 6f 53 74 72 69 6e   $output.ToStrin
29c0: 67 28 29 0d 0a 7d 0d 0a 7d 0d 0a 20 20 20 0d 0a  g()..}..}..   ..
29d0: 66 75 6e 63 74 69 6f 6e 20 43 6f 6e 76 65 72 74  function Convert
29e0: 2d 58 6d 6c 20 7b 0d 0a 23 2e 53 79 6e 6f 70 73  -Xml {..#.Synops
29f0: 69 73 0d 0a 23 20 20 54 68 65 20 43 6f 6e 76 65  is..#  The Conve
2a00: 72 74 2d 58 4d 4c 20 66 75 6e 63 74 69 6f 6e 20  rt-XML function 
2a10: 6c 65 74 73 20 79 6f 75 20 75 73 65 20 58 73 6c  lets you use Xsl
2a20: 74 20 74 6f 20 74 72 61 6e 73 66 6f 72 6d 20 58  t to transform X
2a30: 4d 4c 20 73 74 72 69 6e 67 73 20 61 6e 64 20 64  ML strings and d
2a40: 6f 63 75 6d 65 6e 74 73 2e 0d 0a 23 2e 44 65 73  ocuments...#.Des
2a50: 63 72 69 70 74 69 6f 6e 0d 0a 23 2e 50 61 72 61  cription..#.Para
2a60: 6d 65 74 65 72 20 43 6f 6e 74 65 6e 74 0d 0a 23  meter Content..#
2a70: 20 20 53 70 65 63 69 66 69 65 73 20 61 20 73 74    Specifies a st
2a80: 72 69 6e 67 20 74 68 61 74 20 63 6f 6e 74 61 69  ring that contai
2a90: 6e 73 20 74 68 65 20 58 4d 4c 20 74 6f 20 73 65  ns the XML to se
2aa0: 61 72 63 68 2e 20 59 6f 75 20 63 61 6e 20 61 6c  arch. You can al
2ab0: 73 6f 20 70 69 70 65 20 73 74 72 69 6e 67 73 20  so pipe strings 
2ac0: 74 6f 20 53 65 6c 65 63 74 2d 58 4d 4c 2e 0d 0a  to Select-XML...
2ad0: 23 2e 50 61 72 61 6d 65 74 65 72 20 4e 61 6d 65  #.Parameter Name
2ae0: 73 70 61 63 65 0d 0a 23 20 20 20 53 70 65 63 69  space..#   Speci
2af0: 66 69 65 73 20 61 20 68 61 73 68 20 74 61 62 6c  fies a hash tabl
2b00: 65 20 6f 66 20 74 68 65 20 6e 61 6d 65 73 70 61  e of the namespa
2b10: 63 65 73 20 75 73 65 64 20 69 6e 20 74 68 65 20  ces used in the 
2b20: 58 4d 4c 2e 20 55 73 65 20 74 68 65 20 66 6f 72  XML. Use the for
2b30: 6d 61 74 20 40 7b 3c 6e 61 6d 65 73 70 61 63 65  mat @{<namespace
2b40: 4e 61 6d 65 3e 20 3d 20 3c 6e 61 6d 65 73 70 61  Name> = <namespa
2b50: 63 65 55 72 69 3e 7d 2e 0d 0a 23 2e 50 61 72 61  ceUri>}...#.Para
2b60: 6d 65 74 65 72 20 50 61 74 68 0d 0a 23 20 20 20  meter Path..#   
2b70: 53 70 65 63 69 66 69 65 73 20 74 68 65 20 70 61  Specifies the pa
2b80: 74 68 20 61 6e 64 20 66 69 6c 65 20 6e 61 6d 65  th and file name
2b90: 73 20 6f 66 20 74 68 65 20 58 4d 4c 20 66 69 6c  s of the XML fil
2ba0: 65 73 20 74 6f 20 73 65 61 72 63 68 2e 20 20 57  es to search.  W
2bb0: 69 6c 64 63 61 72 64 73 20 61 72 65 20 70 65 72  ildcards are per
2bc0: 6d 69 74 74 65 64 2e 0d 0a 23 2e 50 61 72 61 6d  mitted...#.Param
2bd0: 65 74 65 72 20 58 6d 6c 0d 0a 23 20 20 53 70 65  eter Xml..#  Spe
2be0: 63 69 66 69 65 73 20 6f 6e 65 20 6f 72 20 6d 6f  cifies one or mo
2bf0: 72 65 20 58 4d 4c 20 6e 6f 64 65 73 20 74 6f 20  re XML nodes to 
2c00: 73 65 61 72 63 68 2e 0d 0a 23 2e 50 61 72 61 6d  search...#.Param
2c10: 65 74 65 72 20 58 73 6c 0d 0a 23 20 20 53 70 65  eter Xsl..#  Spe
2c20: 63 69 66 69 65 73 20 61 6e 20 58 6d 6c 20 53 74  cifies an Xml St
2c30: 79 6c 65 53 68 65 65 74 20 74 6f 20 74 72 61 6e  yleSheet to tran
2c40: 73 66 6f 72 6d 20 77 69 74 68 2e 2e 2e 0d 0a 5b  sform with.....[
2c50: 43 6d 64 6c 65 74 42 69 6e 64 69 6e 67 28 44 65  CmdletBinding(De
2c60: 66 61 75 6c 74 50 61 72 61 6d 65 74 65 72 53 65  faultParameterSe
2c70: 74 4e 61 6d 65 3d 22 58 6d 6c 22 29 5d 0d 0a 50  tName="Xml")]..P
2c80: 41 52 41 4d 28 0d 0a 20 20 20 5b 50 61 72 61 6d  ARAM(..   [Param
2c90: 65 74 65 72 28 50 6f 73 69 74 69 6f 6e 3d 31 2c  eter(Position=1,
2ca0: 50 61 72 61 6d 65 74 65 72 53 65 74 4e 61 6d 65  ParameterSetName
2cb0: 3d 22 50 61 74 68 22 2c 4d 61 6e 64 61 74 6f 72  ="Path",Mandator
2cc0: 79 3d 24 74 72 75 65 2c 56 61 6c 75 65 46 72 6f  y=$true,ValueFro
2cd0: 6d 50 69 70 65 6c 69 6e 65 42 79 50 72 6f 70 65  mPipelineByPrope
2ce0: 72 74 79 4e 61 6d 65 3d 24 74 72 75 65 29 5d 0d  rtyName=$true)].
2cf0: 0a 20 20 20 5b 56 61 6c 69 64 61 74 65 4e 6f 74  .   [ValidateNot
2d00: 4e 75 6c 6c 4f 72 45 6d 70 74 79 28 29 5d 0d 0a  NullOrEmpty()]..
2d10: 20 20 20 5b 41 6c 69 61 73 28 22 50 53 50 61 74     [Alias("PSPat
2d20: 68 22 29 5d 0d 0a 20 20 20 5b 53 74 72 69 6e 67  h")]..   [String
2d30: 5b 5d 5d 24 50 61 74 68 0d 0a 2c 0d 0a 20 20 20  []]$Path..,..   
2d40: 5b 50 61 72 61 6d 65 74 65 72 28 50 6f 73 69 74  [Parameter(Posit
2d50: 69 6f 6e 3d 31 2c 50 61 72 61 6d 65 74 65 72 53  ion=1,ParameterS
2d60: 65 74 4e 61 6d 65 3d 22 58 6d 6c 22 2c 4d 61 6e  etName="Xml",Man
2d70: 64 61 74 6f 72 79 3d 24 74 72 75 65 2c 56 61 6c  datory=$true,Val
2d80: 75 65 46 72 6f 6d 50 69 70 65 6c 69 6e 65 3d 24  ueFromPipeline=$
2d90: 74 72 75 65 2c 56 61 6c 75 65 46 72 6f 6d 50 69  true,ValueFromPi
2da0: 70 65 6c 69 6e 65 42 79 50 72 6f 70 65 72 74 79  pelineByProperty
2db0: 4e 61 6d 65 3d 24 74 72 75 65 29 5d 0d 0a 20 20  Name=$true)]..  
2dc0: 20 5b 56 61 6c 69 64 61 74 65 4e 6f 74 4e 75 6c   [ValidateNotNul
2dd0: 6c 4f 72 45 6d 70 74 79 28 29 5d 0d 0a 20 20 20  lOrEmpty()]..   
2de0: 5b 41 6c 69 61 73 28 22 4e 6f 64 65 22 29 5d 0d  [Alias("Node")].
2df0: 0a 20 20 20 5b 53 79 73 74 65 6d 2e 58 6d 6c 2e  .   [System.Xml.
2e00: 58 6d 6c 4e 6f 64 65 5b 5d 5d 24 58 6d 6c 0d 0a  XmlNode[]]$Xml..
2e10: 2c 0d 0a 20 20 20 5b 50 61 72 61 6d 65 74 65 72  ,..   [Parameter
2e20: 28 50 61 72 61 6d 65 74 65 72 53 65 74 4e 61 6d  (ParameterSetNam
2e30: 65 3d 22 43 6f 6e 74 65 6e 74 22 2c 4d 61 6e 64  e="Content",Mand
2e40: 61 74 6f 72 79 3d 24 74 72 75 65 2c 56 61 6c 75  atory=$true,Valu
2e50: 65 46 72 6f 6d 50 69 70 65 6c 69 6e 65 3d 24 74  eFromPipeline=$t
2e60: 72 75 65 29 5d 0d 0a 20 20 20 5b 56 61 6c 69 64  rue)]..   [Valid
2e70: 61 74 65 4e 6f 74 4e 75 6c 6c 4f 72 45 6d 70 74  ateNotNullOrEmpt
2e80: 79 28 29 5d 0d 0a 20 20 20 5b 53 74 72 69 6e 67  y()]..   [String
2e90: 5b 5d 5d 24 43 6f 6e 74 65 6e 74 0d 0a 2c 0d 0a  []]$Content..,..
2ea0: 20 20 20 5b 50 61 72 61 6d 65 74 65 72 28 50 6f     [Parameter(Po
2eb0: 73 69 74 69 6f 6e 3d 30 2c 4d 61 6e 64 61 74 6f  sition=0,Mandato
2ec0: 72 79 3d 24 74 72 75 65 2c 56 61 6c 75 65 46 72  ry=$true,ValueFr
2ed0: 6f 6d 50 69 70 65 6c 69 6e 65 3d 24 66 61 6c 73  omPipeline=$fals
2ee0: 65 29 5d 0d 0a 20 20 20 5b 56 61 6c 69 64 61 74  e)]..   [Validat
2ef0: 65 4e 6f 74 4e 75 6c 6c 4f 72 45 6d 70 74 79 28  eNotNullOrEmpty(
2f00: 29 5d 0d 0a 20 20 20 5b 41 6c 69 61 73 28 22 53  )]..   [Alias("S
2f10: 74 79 6c 65 53 68 65 65 74 22 29 5d 0d 0a 20 20  tyleSheet")]..  
2f20: 20 5b 53 74 72 69 6e 67 5b 5d 5d 24 58 73 6c 74   [String[]]$Xslt
2f30: 0d 0a 29 0d 0a 42 45 47 49 4e 20 7b 20 0d 0a 20  ..)..BEGIN { .. 
2f40: 20 20 24 53 74 79 6c 65 53 68 65 65 74 20 3d 20    $StyleSheet = 
2f50: 4e 65 77 2d 4f 62 6a 65 63 74 20 53 79 73 74 65  New-Object Syste
2f60: 6d 2e 58 6d 6c 2e 58 73 6c 2e 58 73 6c 43 6f 6d  m.Xml.Xsl.XslCom
2f70: 70 69 6c 65 64 54 72 61 6e 73 66 6f 72 6d 0d 0a  piledTransform..
2f80: 20 20 20 69 66 28 54 65 73 74 2d 50 61 74 68 20     if(Test-Path 
2f90: 40 28 24 58 73 6c 74 29 5b 30 5d 20 2d 45 41 20  @($Xslt)[0] -EA 
2fa0: 30 29 20 7b 20 0d 0a 20 20 20 20 20 20 57 72 69  0) { ..      Wri
2fb0: 74 65 2d 56 65 72 62 6f 73 65 20 22 4c 6f 61 64  te-Verbose "Load
2fc0: 69 6e 67 20 53 74 79 6c 65 73 68 65 65 74 20 66  ing Stylesheet f
2fd0: 72 6f 6d 20 24 28 52 65 73 6f 6c 76 65 2d 50 61  rom $(Resolve-Pa
2fe0: 74 68 20 40 28 24 58 73 6c 74 29 5b 30 5d 29 22  th @($Xslt)[0])"
2ff0: 0d 0a 20 20 20 20 20 20 24 53 74 79 6c 65 53 68  ..      $StyleSh
3000: 65 65 74 2e 4c 6f 61 64 28 20 28 52 65 73 6f 6c  eet.Load( (Resol
3010: 76 65 2d 50 61 74 68 20 40 28 24 58 73 6c 74 29  ve-Path @($Xslt)
3020: 5b 30 5d 29 20 29 0d 0a 20 20 20 7d 20 65 6c 73  [0]) )..   } els
3030: 65 20 7b 0d 0a 20 20 20 20 20 20 57 72 69 74 65  e {..      Write
3040: 2d 56 65 72 62 6f 73 65 20 22 24 58 73 6c 74 22  -Verbose "$Xslt"
3050: 0d 0a 20 20 20 20 20 20 24 53 74 79 6c 65 53 68  ..      $StyleSh
3060: 65 65 74 2e 4c 6f 61 64 28 28 5b 53 79 73 74 65  eet.Load(([Syste
3070: 6d 2e 58 6d 6c 2e 58 6d 6c 52 65 61 64 65 72 5d  m.Xml.XmlReader]
3080: 3a 3a 43 72 65 61 74 65 28 28 4e 65 77 2d 4f 62  ::Create((New-Ob
3090: 6a 65 63 74 20 53 79 73 74 65 6d 2e 49 4f 2e 53  ject System.IO.S
30a0: 74 72 69 6e 67 52 65 61 64 65 72 20 28 24 58 73  tringReader ($Xs
30b0: 6c 74 20 2d 6a 6f 69 6e 20 22 60 6e 22 29 29 29  lt -join "`n")))
30c0: 29 29 0d 0a 20 20 20 7d 0d 0a 20 20 20 5b 54 65  ))..   }..   [Te
30d0: 78 74 2e 53 74 72 69 6e 67 42 75 69 6c 64 65 72  xt.StringBuilder
30e0: 5d 24 58 6d 6c 43 6f 6e 74 65 6e 74 20 3d 20 5b  ]$XmlContent = [
30f0: 53 74 72 69 6e 67 5d 3a 3a 45 6d 70 74 79 20 0d  String]::Empty .
3100: 0a 7d 0d 0a 50 52 4f 43 45 53 53 20 7b 0d 0a 20  .}..PROCESS {.. 
3110: 20 20 73 77 69 74 63 68 28 24 50 53 43 6d 64 6c    switch($PSCmdl
3120: 65 74 2e 50 61 72 61 6d 65 74 65 72 53 65 74 4e  et.ParameterSetN
3130: 61 6d 65 29 20 7b 0d 0a 20 20 20 20 20 20 22 43  ame) {..      "C
3140: 6f 6e 74 65 6e 74 22 20 7b 0d 0a 20 20 20 20 20  ontent" {..     
3150: 20 20 20 20 24 6e 75 6c 6c 20 3d 20 24 58 6d 6c      $null = $Xml
3160: 43 6f 6e 74 65 6e 74 2e 41 70 70 65 6e 64 4c 69  Content.AppendLi
3170: 6e 65 28 20 24 43 6f 6e 74 65 6e 74 20 2d 4a 6f  ne( $Content -Jo
3180: 69 6e 20 22 60 6e 22 20 29 0d 0a 20 20 20 20 20  in "`n" )..     
3190: 20 7d 0d 0a 20 20 20 20 20 20 22 50 61 74 68 22   }..      "Path"
31a0: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 66 6f 72   {..         for
31b0: 65 61 63 68 28 24 66 69 6c 65 20 69 6e 20 47 65  each($file in Ge
31c0: 74 2d 43 68 69 6c 64 49 74 65 6d 20 24 50 61 74  t-ChildItem $Pat
31d0: 68 29 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20  h) {..          
31e0: 20 20 43 6f 6e 76 65 72 74 2d 4e 6f 64 65 20 2d    Convert-Node -
31f0: 58 6d 6c 20 28 5b 53 79 73 74 65 6d 2e 58 6d 6c  Xml ([System.Xml
3200: 2e 58 6d 6c 52 65 61 64 65 72 5d 3a 3a 43 72 65  .XmlReader]::Cre
3210: 61 74 65 28 28 52 65 73 6f 6c 76 65 2d 50 61 74  ate((Resolve-Pat
3220: 68 20 24 66 69 6c 65 29 29 29 20 24 53 74 79 6c  h $file))) $Styl
3230: 65 53 68 65 65 74 0d 0a 20 20 20 20 20 20 20 20  eSheet..        
3240: 20 7d 0d 0a 20 20 20 20 20 20 7d 0d 0a 20 20 20   }..      }..   
3250: 20 20 20 22 58 6d 6c 22 20 7b 0d 0a 20 20 20 20     "Xml" {..    
3260: 20 20 20 20 20 66 6f 72 65 61 63 68 28 24 6e 6f       foreach($no
3270: 64 65 20 69 6e 20 24 58 6d 6c 29 20 7b 0d 0a 20  de in $Xml) {.. 
3280: 20 20 20 20 20 20 20 20 20 20 20 43 6f 6e 76 65             Conve
3290: 72 74 2d 4e 6f 64 65 20 2d 58 6d 6c 20 28 4e 65  rt-Node -Xml (Ne
32a0: 77 2d 4f 62 6a 65 63 74 20 58 6d 6c 2e 58 6d 6c  w-Object Xml.Xml
32b0: 4e 6f 64 65 52 65 61 64 65 72 20 24 6e 6f 64 65  NodeReader $node
32c0: 29 20 24 53 74 79 6c 65 53 68 65 65 74 0d 0a 20  ) $StyleSheet.. 
32d0: 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..     
32e0: 20 7d 0d 0a 20 20 20 7d 0d 0a 7d 0d 0a 45 4e 44   }..   }..}..END
32f0: 20 7b 0d 0a 20 20 20 69 66 28 24 50 53 43 6d 64   {..   if($PSCmd
3300: 6c 65 74 2e 50 61 72 61 6d 65 74 65 72 53 65 74  let.ParameterSet
3310: 4e 61 6d 65 20 2d 65 71 20 22 43 6f 6e 74 65 6e  Name -eq "Conten
3320: 74 22 29 20 7b 0d 0a 20 20 20 20 20 20 5b 58 6d  t") {..      [Xm
3330: 6c 5d 24 58 6d 6c 20 3d 20 24 58 6d 6c 43 6f 6e  l]$Xml = $XmlCon
3340: 74 65 6e 74 2e 54 6f 53 74 72 69 6e 67 28 29 0d  tent.ToString().
3350: 0a 20 20 20 20 20 20 43 6f 6e 76 65 72 74 2d 4e  .      Convert-N
3360: 6f 64 65 20 2d 58 6d 6c 20 24 58 6d 6c 20 24 53  ode -Xml $Xml $S
3370: 74 79 6c 65 53 68 65 65 74 0d 0a 20 20 20 7d 0d  tyleSheet..   }.
3380: 0a 7d 0d 0a 7d 0d 0a 53 65 74 2d 41 6c 69 61 73  .}..}..Set-Alias
3390: 20 63 76 78 6d 6c 20 43 6f 6e 76 65 72 74 2d 58   cvxml Convert-X
33a0: 6d 6c 20 2d 45 41 20 30 0d 0a 0d 0a 66 75 6e 63  ml -EA 0....func
33b0: 74 69 6f 6e 20 52 65 6d 6f 76 65 2d 58 6d 6c 4e  tion Remove-XmlN
33c0: 61 6d 65 73 70 61 63 65 20 7b 0d 0a 23 2e 53 79  amespace {..#.Sy
33d0: 6e 6f 70 73 69 73 0d 0a 23 20 20 52 65 6d 6f 76  nopsis..#  Remov
33e0: 65 73 20 6e 61 6d 65 73 70 61 63 65 20 64 65 66  es namespace def
33f0: 69 6e 69 74 69 6f 6e 73 20 61 6e 64 20 70 72 65  initions and pre
3400: 66 69 78 65 73 20 66 72 6f 6d 20 78 6d 6c 20 64  fixes from xml d
3410: 6f 63 75 6d 65 6e 74 73 0d 0a 23 2e 44 65 73 63  ocuments..#.Desc
3420: 72 69 70 74 69 6f 6e 0d 0a 23 20 20 52 75 6e 73  ription..#  Runs
3430: 20 61 6e 20 78 6d 6c 20 64 6f 63 75 6d 65 6e 74   an xml document
3440: 20 74 68 72 6f 75 67 68 20 61 6e 20 58 53 4c 20   through an XSL 
3450: 54 72 61 6e 73 66 6f 72 6d 61 74 69 6f 6e 20 74  Transformation t
3460: 6f 20 72 65 6d 6f 76 65 20 6e 61 6d 65 73 70 61  o remove namespa
3470: 63 65 73 20 66 72 6f 6d 20 69 74 20 69 66 20 74  ces from it if t
3480: 68 65 79 20 65 78 69 73 74 2e 0d 0a 23 20 20 45  hey exist...#  E
3490: 6e 74 69 74 69 65 73 20 61 72 65 20 61 6c 73 6f  ntities are also
34a0: 20 6e 61 74 75 72 61 6c 6c 79 20 65 78 70 61 6e   naturally expan
34b0: 64 65 64 0d 0a 23 2e 50 61 72 61 6d 65 74 65 72  ded..#.Parameter
34c0: 20 43 6f 6e 74 65 6e 74 0d 0a 23 20 20 53 70 65   Content..#  Spe
34d0: 63 69 66 69 65 73 20 61 20 73 74 72 69 6e 67 20  cifies a string 
34e0: 74 68 61 74 20 63 6f 6e 74 61 69 6e 73 20 74 68  that contains th
34f0: 65 20 58 4d 4c 20 74 6f 20 74 72 61 6e 73 66 6f  e XML to transfo
3500: 72 6d 2e 0d 0a 23 2e 50 61 72 61 6d 65 74 65 72  rm...#.Parameter
3510: 20 50 61 74 68 0d 0a 23 20 20 53 70 65 63 69 66   Path..#  Specif
3520: 69 65 73 20 74 68 65 20 70 61 74 68 20 61 6e 64  ies the path and
3530: 20 66 69 6c 65 20 6e 61 6d 65 73 20 6f 66 20 74   file names of t
3540: 68 65 20 58 4d 4c 20 66 69 6c 65 73 20 74 6f 20  he XML files to 
3550: 74 72 61 6e 73 66 6f 72 6d 2e 20 57 69 6c 64 63  transform. Wildc
3560: 61 72 64 73 20 61 72 65 20 70 65 72 6d 69 74 74  ards are permitt
3570: 65 64 2e 0d 0a 23 0d 0a 23 20 20 54 68 65 72 65  ed...#..#  There
3580: 20 77 69 6c 6c 20 62 6e 65 20 6f 6e 65 20 6f 75   will bne one ou
3590: 74 70 75 74 20 64 6f 63 75 6d 65 6e 74 20 66 6f  tput document fo
35a0: 72 20 65 61 63 68 20 6d 61 74 63 68 69 6e 67 20  r each matching 
35b0: 69 6e 70 75 74 20 66 69 6c 65 2e 0d 0a 23 2e 50  input file...#.P
35c0: 61 72 61 6d 65 74 65 72 20 58 6d 6c 0d 0a 23 20  arameter Xml..# 
35d0: 20 53 70 65 63 69 66 69 65 73 20 6f 6e 65 20 6f   Specifies one o
35e0: 72 20 6d 6f 72 65 20 58 4d 4c 20 64 6f 63 75 6d  r more XML docum
35f0: 65 6e 74 73 20 74 6f 20 74 72 61 6e 73 66 6f 72  ents to transfor
3600: 6d 0d 0a 5b 43 6d 64 6c 65 74 42 69 6e 64 69 6e  m..[CmdletBindin
3610: 67 28 44 65 66 61 75 6c 74 50 61 72 61 6d 65 74  g(DefaultParamet
3620: 65 72 53 65 74 4e 61 6d 65 3d 22 58 6d 6c 22 29  erSetName="Xml")
3630: 5d 0d 0a 50 41 52 41 4d 28 0d 0a 20 20 20 5b 50  ]..PARAM(..   [P
3640: 61 72 61 6d 65 74 65 72 28 50 6f 73 69 74 69 6f  arameter(Positio
3650: 6e 3d 31 2c 50 61 72 61 6d 65 74 65 72 53 65 74  n=1,ParameterSet
3660: 4e 61 6d 65 3d 22 50 61 74 68 22 2c 4d 61 6e 64  Name="Path",Mand
3670: 61 74 6f 72 79 3d 24 74 72 75 65 2c 56 61 6c 75  atory=$true,Valu
3680: 65 46 72 6f 6d 50 69 70 65 6c 69 6e 65 42 79 50  eFromPipelineByP
3690: 72 6f 70 65 72 74 79 4e 61 6d 65 3d 24 74 72 75  ropertyName=$tru
36a0: 65 29 5d 0d 0a 20 20 20 5b 56 61 6c 69 64 61 74  e)]..   [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 5b 41 6c 69 61 73 28 22 50  )]..   [Alias("P
36d0: 53 50 61 74 68 22 29 5d 0d 0a 20 20 20 5b 53 74  SPath")]..   [St
36e0: 72 69 6e 67 5b 5d 5d 24 50 61 74 68 0d 0a 2c 0d  ring[]]$Path..,.
36f0: 0a 20 20 20 5b 50 61 72 61 6d 65 74 65 72 28 50  .   [Parameter(P
3700: 6f 73 69 74 69 6f 6e 3d 31 2c 50 61 72 61 6d 65  osition=1,Parame
3710: 74 65 72 53 65 74 4e 61 6d 65 3d 22 58 6d 6c 22  terSetName="Xml"
3720: 2c 4d 61 6e 64 61 74 6f 72 79 3d 24 74 72 75 65  ,Mandatory=$true
3730: 2c 56 61 6c 75 65 46 72 6f 6d 50 69 70 65 6c 69  ,ValueFromPipeli
3740: 6e 65 3d 24 74 72 75 65 2c 56 61 6c 75 65 46 72  ne=$true,ValueFr
3750: 6f 6d 50 69 70 65 6c 69 6e 65 42 79 50 72 6f 70  omPipelineByProp
3760: 65 72 74 79 4e 61 6d 65 3d 24 74 72 75 65 29 5d  ertyName=$true)]
3770: 0d 0a 20 20 20 5b 56 61 6c 69 64 61 74 65 4e 6f  ..   [ValidateNo
3780: 74 4e 75 6c 6c 4f 72 45 6d 70 74 79 28 29 5d 0d  tNullOrEmpty()].
3790: 0a 20 20 20 5b 41 6c 69 61 73 28 22 4e 6f 64 65  .   [Alias("Node
37a0: 22 29 5d 0d 0a 20 20 20 5b 53 79 73 74 65 6d 2e  ")]..   [System.
37b0: 58 6d 6c 2e 58 6d 6c 4e 6f 64 65 5b 5d 5d 24 58  Xml.XmlNode[]]$X
37c0: 6d 6c 0d 0a 2c 0d 0a 20 20 20 5b 50 61 72 61 6d  ml..,..   [Param
37d0: 65 74 65 72 28 50 61 72 61 6d 65 74 65 72 53 65  eter(ParameterSe
37e0: 74 4e 61 6d 65 3d 22 43 6f 6e 74 65 6e 74 22 2c  tName="Content",
37f0: 4d 61 6e 64 61 74 6f 72 79 3d 24 74 72 75 65 2c  Mandatory=$true,
3800: 56 61 6c 75 65 46 72 6f 6d 50 69 70 65 6c 69 6e  ValueFromPipelin
3810: 65 3d 24 74 72 75 65 29 5d 0d 0a 20 20 20 5b 56  e=$true)]..   [V
3820: 61 6c 69 64 61 74 65 4e 6f 74 4e 75 6c 6c 4f 72  alidateNotNullOr
3830: 45 6d 70 74 79 28 29 5d 0d 0a 20 20 20 5b 53 74  Empty()]..   [St
3840: 72 69 6e 67 5b 5d 5d 24 43 6f 6e 74 65 6e 74 0d  ring[]]$Content.
3850: 0a 2c 0d 0a 20 20 20 5b 50 61 72 61 6d 65 74 65  .,..   [Paramete
3860: 72 28 50 6f 73 69 74 69 6f 6e 3d 30 2c 4d 61 6e  r(Position=0,Man
3870: 64 61 74 6f 72 79 3d 24 74 72 75 65 2c 56 61 6c  datory=$true,Val
3880: 75 65 46 72 6f 6d 50 69 70 65 6c 69 6e 65 3d 24  ueFromPipeline=$
3890: 66 61 6c 73 65 29 5d 0d 0a 20 20 20 5b 56 61 6c  false)]..   [Val
38a0: 69 64 61 74 65 4e 6f 74 4e 75 6c 6c 4f 72 45 6d  idateNotNullOrEm
38b0: 70 74 79 28 29 5d 0d 0a 20 20 20 5b 41 6c 69 61  pty()]..   [Alia
38c0: 73 28 22 53 74 79 6c 65 53 68 65 65 74 22 29 5d  s("StyleSheet")]
38d0: 0d 0a 20 20 20 5b 53 74 72 69 6e 67 5b 5d 5d 24  ..   [String[]]$
38e0: 58 73 6c 74 0d 0a 29 0d 0a 42 45 47 49 4e 20 7b  Xslt..)..BEGIN {
38f0: 20 0d 0a 20 20 20 24 53 74 79 6c 65 53 68 65 65   ..   $StyleShee
3900: 74 20 3d 20 4e 65 77 2d 4f 62 6a 65 63 74 20 53  t = New-Object S
3910: 79 73 74 65 6d 2e 58 6d 6c 2e 58 73 6c 2e 58 73  ystem.Xml.Xsl.Xs
3920: 6c 43 6f 6d 70 69 6c 65 64 54 72 61 6e 73 66 6f  lCompiledTransfo
3930: 72 6d 0d 0a 20 20 20 24 53 74 79 6c 65 53 68 65  rm..   $StyleShe
3940: 65 74 2e 4c 6f 61 64 28 28 5b 53 79 73 74 65 6d  et.Load(([System
3950: 2e 58 6d 6c 2e 58 6d 6c 52 65 61 64 65 72 5d 3a  .Xml.XmlReader]:
3960: 3a 43 72 65 61 74 65 28 28 4e 65 77 2d 4f 62 6a  :Create((New-Obj
3970: 65 63 74 20 53 79 73 74 65 6d 2e 49 4f 2e 53 74  ect System.IO.St
3980: 72 69 6e 67 52 65 61 64 65 72 20 40 22 0d 0a 3c  ringReader @"..<
3990: 78 73 6c 3a 73 74 79 6c 65 73 68 65 65 74 20 76  xsl:stylesheet v
39a0: 65 72 73 69 6f 6e 3d 22 31 2e 30 22 20 78 6d 6c  ersion="1.0" xml
39b0: 6e 73 3a 78 73 6c 3d 22 68 74 74 70 3a 2f 2f 77  ns:xsl="http://w
39c0: 77 77 2e 77 33 2e 6f 72 67 2f 31 39 39 39 2f 58  ww.w3.org/1999/X
39d0: 53 4c 2f 54 72 61 6e 73 66 6f 72 6d 22 3e 0d 0a  SL/Transform">..
39e0: 20 20 20 3c 78 73 6c 3a 6f 75 74 70 75 74 20 6d     <xsl:output m
39f0: 65 74 68 6f 64 3d 22 78 6d 6c 22 20 69 6e 64 65  ethod="xml" inde
3a00: 6e 74 3d 22 79 65 73 22 2f 3e 0d 0a 20 20 20 3c  nt="yes"/>..   <
3a10: 78 73 6c 3a 74 65 6d 70 6c 61 74 65 20 6d 61 74  xsl:template mat
3a20: 63 68 3d 22 2f 7c 63 6f 6d 6d 65 6e 74 28 29 7c  ch="/|comment()|
3a30: 70 72 6f 63 65 73 73 69 6e 67 2d 69 6e 73 74 72  processing-instr
3a40: 75 63 74 69 6f 6e 28 29 22 3e 0d 0a 20 20 20 20  uction()">..    
3a50: 20 20 3c 78 73 6c 3a 63 6f 70 79 3e 0d 0a 20 20    <xsl:copy>..  
3a60: 20 20 20 20 20 20 20 3c 78 73 6c 3a 61 70 70 6c         <xsl:appl
3a70: 79 2d 74 65 6d 70 6c 61 74 65 73 2f 3e 0d 0a 20  y-templates/>.. 
3a80: 20 20 20 20 20 3c 2f 78 73 6c 3a 63 6f 70 79 3e       </xsl:copy>
3a90: 0d 0a 20 20 20 3c 2f 78 73 6c 3a 74 65 6d 70 6c  ..   </xsl:templ
3aa0: 61 74 65 3e 0d 0a 0d 0a 20 20 20 3c 78 73 6c 3a  ate>....   <xsl:
3ab0: 74 65 6d 70 6c 61 74 65 20 6d 61 74 63 68 3d 22  template match="
3ac0: 2a 22 3e 0d 0a 20 20 20 20 20 20 3c 78 73 6c 3a  *">..      <xsl:
3ad0: 65 6c 65 6d 65 6e 74 20 6e 61 6d 65 3d 22 7b 6c  element name="{l
3ae0: 6f 63 61 6c 2d 6e 61 6d 65 28 29 7d 22 3e 0d 0a  ocal-name()}">..
3af0: 20 20 20 20 20 20 20 20 20 3c 78 73 6c 3a 61 70           <xsl:ap
3b00: 70 6c 79 2d 74 65 6d 70 6c 61 74 65 73 20 73 65  ply-templates se
3b10: 6c 65 63 74 3d 22 40 2a 7c 6e 6f 64 65 28 29 22  lect="@*|node()"
3b20: 2f 3e 0d 0a 20 20 20 20 20 20 3c 2f 78 73 6c 3a  />..      </xsl:
3b30: 65 6c 65 6d 65 6e 74 3e 0d 0a 20 20 20 3c 2f 78  element>..   </x
3b40: 73 6c 3a 74 65 6d 70 6c 61 74 65 3e 0d 0a 0d 0a  sl:template>....
3b50: 20 20 20 3c 78 73 6c 3a 74 65 6d 70 6c 61 74 65     <xsl:template
3b60: 20 6d 61 74 63 68 3d 22 40 2a 22 3e 0d 0a 20 20   match="@*">..  
3b70: 20 20 20 20 3c 78 73 6c 3a 61 74 74 72 69 62 75      <xsl:attribu
3b80: 74 65 20 6e 61 6d 65 3d 22 7b 6c 6f 63 61 6c 2d  te name="{local-
3b90: 6e 61 6d 65 28 29 7d 22 3e 0d 0a 20 20 20 20 20  name()}">..     
3ba0: 20 20 20 20 3c 78 73 6c 3a 76 61 6c 75 65 2d 6f      <xsl:value-o
3bb0: 66 20 73 65 6c 65 63 74 3d 22 2e 22 2f 3e 0d 0a  f select="."/>..
3bc0: 20 20 20 20 20 20 3c 2f 78 73 6c 3a 61 74 74 72        </xsl:attr
3bd0: 69 62 75 74 65 3e 0d 0a 20 20 20 3c 2f 78 73 6c  ibute>..   </xsl
3be0: 3a 74 65 6d 70 6c 61 74 65 3e 0d 0a 3c 2f 78 73  :template>..</xs
3bf0: 6c 3a 73 74 79 6c 65 73 68 65 65 74 3e 0d 0a 22  l:stylesheet>.."
3c00: 40 29 29 29 29 0d 0a 20 20 20 5b 54 65 78 74 2e  @))))..   [Text.
3c10: 53 74 72 69 6e 67 42 75 69 6c 64 65 72 5d 24 58  StringBuilder]$X
3c20: 6d 6c 43 6f 6e 74 65 6e 74 20 3d 20 5b 53 74 72  mlContent = [Str
3c30: 69 6e 67 5d 3a 3a 45 6d 70 74 79 20 0d 0a 7d 0d  ing]::Empty ..}.
3c40: 0a 50 52 4f 43 45 53 53 20 7b 0d 0a 20 20 20 73  .PROCESS {..   s
3c50: 77 69 74 63 68 28 24 50 53 43 6d 64 6c 65 74 2e  witch($PSCmdlet.
3c60: 50 61 72 61 6d 65 74 65 72 53 65 74 4e 61 6d 65  ParameterSetName
3c70: 29 20 7b 0d 0a 20 20 20 20 20 20 22 43 6f 6e 74  ) {..      "Cont
3c80: 65 6e 74 22 20 7b 0d 0a 20 20 20 20 20 20 20 20  ent" {..        
3c90: 20 24 6e 75 6c 6c 20 3d 20 24 58 6d 6c 43 6f 6e   $null = $XmlCon
3ca0: 74 65 6e 74 2e 41 70 70 65 6e 64 4c 69 6e 65 28  tent.AppendLine(
3cb0: 20 24 43 6f 6e 74 65 6e 74 20 2d 4a 6f 69 6e 20   $Content -Join 
3cc0: 22 60 6e 22 20 29 0d 0a 20 20 20 20 20 20 7d 0d  "`n" )..      }.
3cd0: 0a 20 20 20 20 20 20 22 50 61 74 68 22 20 7b 0d  .      "Path" {.
3ce0: 0a 20 20 20 20 20 20 20 20 20 66 6f 72 65 61 63  .         foreac
3cf0: 68 28 24 66 69 6c 65 20 69 6e 20 47 65 74 2d 43  h($file in Get-C
3d00: 68 69 6c 64 49 74 65 6d 20 24 50 61 74 68 29 20  hildItem $Path) 
3d10: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 5b  {..            [
3d20: 58 6d 6c 5d 24 58 6d 6c 20 3d 20 47 65 74 2d 43  Xml]$Xml = Get-C
3d30: 6f 6e 74 65 6e 74 20 24 66 69 6c 65 0d 0a 20 20  ontent $file..  
3d40: 20 20 20 20 20 20 20 20 20 20 43 6f 6e 76 65 72            Conver
3d50: 74 2d 4e 6f 64 65 20 2d 58 6d 6c 20 24 58 6d 6c  t-Node -Xml $Xml
3d60: 20 24 53 74 79 6c 65 53 68 65 65 74 0d 0a 20 20   $StyleSheet..  
3d70: 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..      
3d80: 7d 0d 0a 20 20 20 20 20 20 22 58 6d 6c 22 20 7b  }..      "Xml" {
3d90: 0d 0a 20 20 20 20 20 20 20 20 20 24 58 6d 6c 20  ..         $Xml 
3da0: 7c 20 43 6f 6e 76 65 72 74 2d 4e 6f 64 65 20 24  | Convert-Node $
3db0: 53 74 79 6c 65 53 68 65 65 74 0d 0a 20 20 20 20  StyleSheet..    
3dc0: 20 20 7d 0d 0a 20 20 20 7d 0d 0a 7d 0d 0a 45 4e    }..   }..}..EN
3dd0: 44 20 7b 0d 0a 20 20 20 69 66 28 24 50 53 43 6d  D {..   if($PSCm
3de0: 64 6c 65 74 2e 50 61 72 61 6d 65 74 65 72 53 65  dlet.ParameterSe
3df0: 74 4e 61 6d 65 20 2d 65 71 20 22 43 6f 6e 74 65  tName -eq "Conte
3e00: 6e 74 22 29 20 7b 0d 0a 20 20 20 20 20 20 5b 58  nt") {..      [X
3e10: 6d 6c 5d 24 58 6d 6c 20 3d 20 24 58 6d 6c 43 6f  ml]$Xml = $XmlCo
3e20: 6e 74 65 6e 74 2e 54 6f 53 74 72 69 6e 67 28 29  ntent.ToString()
3e30: 0d 0a 20 20 20 20 20 20 43 6f 6e 76 65 72 74 2d  ..      Convert-
3e40: 4e 6f 64 65 20 2d 58 6d 6c 20 24 58 6d 6c 20 24  Node -Xml $Xml $
3e50: 53 74 79 6c 65 53 68 65 65 74 0d 0a 20 20 20 7d  StyleSheet..   }
3e60: 0d 0a 7d 0d 0a 7d 0d 0a 53 65 74 2d 41 6c 69 61  ..}..}..Set-Alia
3e70: 73 20 72 6d 6e 73 20 52 65 6d 6f 76 65 2d 58 6d  s rmns Remove-Xm
3e80: 6c 4e 61 6d 65 73 70 61 63 65 20 2d 45 41 20 30  lNamespace -EA 0
3e90: 0d 0a 0d 0a 0d 0a 0d 0a 66 75 6e 63 74 69 6f 6e  ........function
3ea0: 20 4e 65 77 2d 58 44 6f 63 75 6d 65 6e 74 20 7b   New-XDocument {
3eb0: 0d 0a 23 2e 53 79 6e 6f 70 73 69 73 0d 0a 23 20  ..#.Synopsis..# 
3ec0: 20 20 43 72 65 61 74 65 73 20 61 20 6e 65 77 20    Creates a new 
3ed0: 58 44 6f 63 75 6d 65 6e 74 20 28 74 68 65 20 6e  XDocument (the n
3ee0: 65 77 20 78 6d 6c 20 64 6f 63 75 6d 65 6e 74 20  ew xml document 
3ef0: 74 79 70 65 29 0d 0a 23 2e 44 65 73 63 72 69 70  type)..#.Descrip
3f00: 74 69 6f 6e 0d 0a 23 20 20 54 68 69 73 20 69 73  tion..#  This is
3f10: 20 74 68 65 20 72 6f 6f 74 20 66 6f 72 20 61 20   the root for a 
3f20: 6e 65 77 20 58 4d 4c 20 6d 69 6e 69 2d 64 73 6c  new XML mini-dsl
3f30: 2c 20 61 6b 69 6e 20 74 6f 20 4e 65 77 2d 42 6f  , akin to New-Bo
3f40: 6f 74 73 57 69 6e 64 6f 77 20 66 6f 72 20 58 41  otsWindow for XA
3f50: 4d 4c 0d 0a 23 20 20 49 74 20 63 72 65 61 74 65  ML..#  It create
3f60: 73 20 61 20 6e 65 77 20 58 44 6f 63 75 6d 65 6e  s a new XDocumen
3f70: 74 2c 20 61 6e 64 20 74 61 6b 65 73 20 73 63 72  t, and takes scr
3f80: 69 74 70 62 6c 6f 63 6b 28 73 29 20 74 6f 20 64  itpblock(s) to d
3f90: 65 66 69 6e 65 20 69 74 27 73 20 63 6f 6e 74 65  efine it's conte
3fa0: 6e 74 73 0d 0a 23 2e 50 61 72 61 6d 65 74 65 72  nts..#.Parameter
3fb0: 20 72 6f 6f 74 0d 0a 23 20 20 20 54 68 65 20 72   root..#   The r
3fc0: 6f 6f 74 20 6e 6f 64 65 20 6e 61 6d 65 0d 0a 23  oot node name..#
3fd0: 2e 50 61 72 61 6d 65 74 65 72 20 76 65 72 73 69  .Parameter versi
3fe0: 6f 6e 0d 0a 23 20 20 20 4f 70 74 69 6f 6e 61 6c  on..#   Optional
3ff0: 3a 20 74 68 65 20 58 4d 4c 20 76 65 72 73 69 6f  : the XML versio
4000: 6e 2e 20 44 65 66 61 75 6c 74 73 20 74 6f 20 31  n. Defaults to 1
4010: 2e 30 0d 0a 23 2e 50 61 72 61 6d 65 74 65 72 20  .0..#.Parameter 
4020: 65 6e 63 6f 64 69 6e 67 0d 0a 23 20 20 20 4f 70  encoding..#   Op
4030: 74 69 6f 6e 61 6c 3a 20 74 68 65 20 45 6e 63 6f  tional: the Enco
4040: 64 69 6e 67 2e 20 44 65 66 61 75 6c 74 73 20 74  ding. Defaults t
4050: 6f 20 55 54 46 2d 38 0d 0a 23 2e 50 61 72 61 6d  o UTF-8..#.Param
4060: 65 74 65 72 20 73 74 61 6e 64 61 6c 6f 6e 65 0d  eter standalone.
4070: 0a 23 20 20 4f 70 74 69 6f 6e 61 6c 3a 20 77 68  .#  Optional: wh
4080: 65 74 68 65 72 20 74 6f 20 73 70 65 63 69 66 79  ether to specify
4090: 20 73 74 61 6e 64 61 6c 6f 6e 65 20 69 6e 20 74   standalone in t
40a0: 68 65 20 78 6d 6c 20 64 65 63 6c 61 72 61 74 69  he xml declarati
40b0: 6f 6e 2e 20 44 65 66 61 75 6c 74 73 20 74 6f 20  on. Defaults to 
40c0: 22 79 65 73 22 0d 0a 23 2e 50 61 72 61 6d 65 74  "yes"..#.Paramet
40d0: 65 72 20 61 72 67 73 0d 0a 23 20 20 20 74 68 69  er args..#   thi
40e0: 73 20 69 73 20 77 68 65 72 65 20 61 6c 6c 20 74  s is where all t
40f0: 68 65 20 64 73 6c 20 6d 61 67 69 63 20 68 61 70  he dsl magic hap
4100: 70 65 6e 73 2e 20 50 6c 65 61 73 65 20 73 65 65  pens. Please see
4110: 20 74 68 65 20 45 78 61 6d 70 6c 65 73 2e 20 3a   the Examples. :
4120: 29 0d 0a 23 0d 0a 23 2e 45 78 61 6d 70 6c 65 0d  )..#..#.Example.
4130: 0a 23 20 5b 73 74 72 69 6e 67 5d 24 78 6d 6c 20  .# [string]$xml 
4140: 3d 20 4e 65 77 2d 58 44 6f 63 75 6d 65 6e 74 20  = New-XDocument 
4150: 72 73 73 20 2d 76 65 72 73 69 6f 6e 20 22 32 2e  rss -version "2.
4160: 30 22 20 7b 0d 0a 23 20 20 20 20 63 68 61 6e 6e  0" {..#    chann
4170: 65 6c 20 7b 0d 0a 23 20 20 20 20 20 20 20 74 69  el {..#       ti
4180: 74 6c 65 20 7b 22 54 65 73 74 20 52 53 53 20 46  tle {"Test RSS F
4190: 65 65 64 22 7d 0d 0a 23 20 20 20 20 20 20 20 6c  eed"}..#       l
41a0: 69 6e 6b 20 7b 22 68 74 74 70 60 3a 2f 2f 48 75  ink {"http`://Hu
41b0: 64 64 6c 65 64 4d 61 73 73 65 73 2e 6f 72 67 22  ddledMasses.org"
41c0: 7d 0d 0a 23 20 20 20 20 20 20 20 64 65 73 63 72  }..#       descr
41d0: 69 70 74 69 6f 6e 20 7b 22 41 6e 20 52 53 53 20  iption {"An RSS 
41e0: 46 65 65 64 20 67 65 6e 65 72 61 74 65 64 20 73  Feed generated s
41f0: 69 6d 70 6c 79 20 74 6f 20 64 65 6d 6f 6e 73 74  imply to demonst
4200: 72 61 74 65 20 6d 79 20 58 4d 4c 20 44 53 4c 22  rate my XML DSL"
4210: 7d 0d 0a 23 20 20 20 20 20 20 20 69 74 65 6d 20  }..#       item 
4220: 7b 0d 0a 23 20 20 20 20 20 20 20 20 20 20 74 69  {..#          ti
4230: 74 6c 65 20 7b 22 54 68 65 20 46 69 72 73 74 20  tle {"The First 
4240: 49 74 65 6d 22 7d 0d 0a 23 20 20 20 20 20 20 20  Item"}..#       
4250: 20 20 20 6c 69 6e 6b 20 7b 22 68 74 74 70 60 3a     link {"http`:
4260: 2f 2f 68 75 64 64 6c 65 64 6d 61 73 73 65 73 2e  //huddledmasses.
4270: 6f 72 67 2f 6e 65 77 2d 73 69 74 65 2d 6e 65 77  org/new-site-new
4280: 2d 6c 61 79 6f 75 74 2d 6c 6f 73 74 2d 70 6f 73  -layout-lost-pos
4290: 74 73 2f 22 7d 0d 0a 23 20 20 20 20 20 20 20 20  ts/"}..#        
42a0: 20 20 67 75 69 64 20 2d 69 73 50 65 72 6d 61 4c    guid -isPermaL
42b0: 69 6e 6b 20 74 72 75 65 20 7b 22 68 74 74 70 60  ink true {"http`
42c0: 3a 2f 2f 68 75 64 64 6c 65 64 6d 61 73 73 65 73  ://huddledmasses
42d0: 2e 6f 72 67 2f 6e 65 77 2d 73 69 74 65 2d 6e 65  .org/new-site-ne
42e0: 77 2d 6c 61 79 6f 75 74 2d 6c 6f 73 74 2d 70 6f  w-layout-lost-po
42f0: 73 74 73 2f 22 7d 0d 0a 23 20 20 20 20 20 20 20  sts/"}..#       
4300: 20 20 20 64 65 73 63 72 69 70 74 69 6f 6e 20 7b     description {
4310: 22 45 6d 61 20 4c 61 7a 61 72 75 73 27 20 50 6f  "Ema Lazarus' Po
4320: 65 6d 22 7d 0d 0a 23 20 20 20 20 20 20 20 20 20  em"}..#         
4330: 20 70 75 62 44 61 74 65 20 7b 28 47 65 74 2d 44   pubDate {(Get-D
4340: 61 74 65 20 31 30 2f 33 31 2f 32 30 30 33 20 2d  ate 10/31/2003 -
4350: 66 20 75 29 20 2d 72 65 70 6c 61 63 65 20 22 20  f u) -replace " 
4360: 22 2c 22 54 22 7d 0d 0a 23 20 20 20 20 20 20 20  ","T"}..#       
4370: 7d 0d 0a 23 20 20 20 20 7d 0d 0a 23 20 7d 0d 0a  }..#    }..# }..
4380: 23 0d 0a 23 20 43 3a 5c 50 53 3e 24 78 6d 6c 2e  #..# C:\PS>$xml.
4390: 44 65 63 6c 61 72 61 74 69 6f 6e 2e 54 6f 53 74  Declaration.ToSt
43a0: 72 69 6e 67 28 29 20 20 23 23 20 49 20 63 61 6e  ring()  ## I can
43b0: 27 74 20 66 69 6e 64 20 61 20 77 61 79 20 74 6f  't find a way to
43c0: 20 68 61 76 65 20 74 68 69 73 20 69 6e 63 6c 75   have this inclu
43d0: 64 65 64 20 69 6e 20 74 68 65 20 24 78 6d 6c 2e  ded in the $xml.
43e0: 54 6f 53 74 72 69 6e 67 28 29 0d 0a 23 20 43 3a  ToString()..# C:
43f0: 5c 50 53 3e 24 78 6d 6c 2e 54 6f 53 74 72 69 6e  \PS>$xml.ToStrin
4400: 67 28 29 0d 0a 23 0d 0a 23 20 3c 3f 78 6d 6c 20  g()..#..# <?xml 
4410: 76 65 72 73 69 6f 6e 3d 22 31 2e 30 22 20 65 6e  version="1.0" en
4420: 63 6f 64 69 6e 67 3d 22 55 54 46 2d 38 22 20 73  coding="UTF-8" s
4430: 74 61 6e 64 61 6c 6f 6e 65 3d 22 79 65 73 22 3f  tandalone="yes"?
4440: 3e 0d 0a 23 20 3c 72 73 73 20 76 65 72 73 69 6f  >..# <rss versio
4450: 6e 3d 22 32 2e 30 22 3e 0d 0a 23 20 20 20 3c 63  n="2.0">..#   <c
4460: 68 61 6e 6e 65 6c 3e 0d 0a 23 20 20 20 20 20 3c  hannel>..#     <
4470: 74 69 74 6c 65 3e 54 65 73 74 20 52 53 53 20 46  title>Test RSS F
4480: 65 65 64 3c 2f 74 69 74 6c 65 3e 0d 0a 23 20 20  eed</title>..#  
4490: 20 20 20 3c 6c 69 6e 6b 3e 68 74 74 70 20 3a 2f     <link>http :/
44a0: 2f 48 75 64 64 6c 65 64 4d 61 73 73 65 73 2e 6f  /HuddledMasses.o
44b0: 72 67 3c 2f 6c 69 6e 6b 3e 0d 0a 23 20 20 20 20  rg</link>..#    
44c0: 20 3c 64 65 73 63 72 69 70 74 69 6f 6e 3e 41 6e   <description>An
44d0: 20 52 53 53 20 46 65 65 64 20 67 65 6e 65 72 61   RSS Feed genera
44e0: 74 65 64 20 73 69 6d 70 6c 79 20 74 6f 20 64 65  ted simply to de
44f0: 6d 6f 6e 73 74 72 61 74 65 20 6d 79 20 58 4d 4c  monstrate my XML
4500: 20 44 53 4c 3c 2f 64 65 73 63 72 69 70 74 69 6f   DSL</descriptio
4510: 6e 3e 0d 0a 23 20 20 20 20 20 3c 69 74 65 6d 3e  n>..#     <item>
4520: 0d 0a 23 20 20 20 20 20 20 20 3c 74 69 74 6c 65  ..#       <title
4530: 3e 54 68 65 20 46 69 72 73 74 20 49 74 65 6d 3c  >The First Item<
4540: 2f 74 69 74 6c 65 3e 0d 0a 23 20 20 20 20 20 20  /title>..#      
4550: 20 3c 6c 69 6e 6b 3e 68 74 74 70 20 3a 2f 2f 68   <link>http ://h
4560: 75 64 64 6c 65 64 6d 61 73 73 65 73 2e 6f 72 67  uddledmasses.org
4570: 2f 6e 65 77 2d 73 69 74 65 2d 6e 65 77 2d 6c 61  /new-site-new-la
4580: 79 6f 75 74 2d 6c 6f 73 74 2d 70 6f 73 74 73 2f  yout-lost-posts/
4590: 3c 2f 6c 69 6e 6b 3e 0d 0a 23 20 20 20 20 20 20  </link>..#      
45a0: 20 3c 67 75 69 64 20 69 73 50 65 72 6d 61 4c 69   <guid isPermaLi
45b0: 6e 6b 3d 22 74 72 75 65 22 3e 68 74 74 70 20 3a  nk="true">http :
45c0: 2f 2f 68 75 64 64 6c 65 64 6d 61 73 73 65 73 2e  //huddledmasses.
45d0: 6f 72 67 2f 6e 65 77 2d 73 69 74 65 2d 6e 65 77  org/new-site-new
45e0: 2d 6c 61 79 6f 75 74 2d 6c 6f 73 74 2d 70 6f 73  -layout-lost-pos
45f0: 74 73 2f 3c 2f 67 75 69 64 3e 0d 0a 23 20 20 20  ts/</guid>..#   
4600: 20 20 20 20 3c 64 65 73 63 72 69 70 74 69 6f 6e      <description
4610: 3e 45 6d 61 20 4c 61 7a 61 72 75 73 27 20 50 6f  >Ema Lazarus' Po
4620: 65 6d 3c 2f 64 65 73 63 72 69 70 74 69 6f 6e 3e  em</description>
4630: 0d 0a 23 20 20 20 20 20 20 20 3c 70 75 62 44 61  ..#       <pubDa
4640: 74 65 3e 32 30 30 33 2d 31 30 2d 33 31 54 30 30  te>2003-10-31T00
4650: 3a 30 30 3a 30 30 5a 3c 2f 70 75 62 44 61 74 65  :00:00Z</pubDate
4660: 3e 0d 0a 23 20 20 20 20 20 3c 2f 69 74 65 6d 3e  >..#     </item>
4670: 0d 0a 23 20 20 20 3c 2f 63 68 61 6e 6e 65 6c 3e  ..#   </channel>
4680: 0d 0a 23 20 3c 2f 72 73 73 3e 0d 0a 23 0d 0a 23  ..# </rss>..#..#
4690: 0d 0a 23 20 44 65 73 63 72 69 70 74 69 6f 6e 0d  ..# Description.
46a0: 0a 23 20 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0d 0a  .# -----------..
46b0: 23 20 54 68 69 73 20 65 78 61 6d 70 6c 65 20 73  # This example s
46c0: 68 6f 77 73 20 74 68 65 20 63 72 65 61 74 69 6f  hows the creatio
46d0: 6e 20 6f 66 20 61 20 63 6f 6d 70 6c 65 74 65 20  n of a complete 
46e0: 52 53 53 20 66 65 65 64 20 77 69 74 68 20 61 20  RSS feed with a 
46f0: 73 69 6e 67 6c 65 20 69 74 65 6d 20 69 6e 20 69  single item in i
4700: 74 2e 20 0d 0a 23 0d 0a 23 20 4e 4f 54 45 20 74  t. ..#..# NOTE t
4710: 68 61 74 20 74 68 65 20 62 61 63 6b 74 69 63 6b  hat the backtick
4720: 20 69 6e 20 74 68 65 20 68 74 74 70 60 3a 20 69   in the http`: i
4730: 6e 20 74 68 65 20 55 52 4c 73 20 69 6e 20 74 68  n the URLs in th
4740: 65 20 69 6e 70 75 74 20 69 73 20 75 6e 65 63 65  e input is unece
4750: 73 73 61 72 79 2c 20 61 6e 64 20 49 20 61 64 64  ssary, and I add
4760: 65 64 20 74 68 65 20 73 70 61 63 65 20 61 66 74  ed the space aft
4770: 65 72 20 74 68 65 20 68 74 74 70 3a 20 69 6e 20  er the http: in 
4780: 74 68 65 20 55 52 4c 73 20 20 69 6e 20 74 68 65  the URLs  in the
4790: 20 6f 75 74 70 75 74 20 2d 2d 20 74 68 65 73 65   output -- these
47a0: 20 61 72 65 20 61 63 63 6f 6d 6f 64 61 74 69 6f   are accomodatio
47b0: 6e 73 20 74 6f 20 50 6f 73 68 43 6f 64 65 27 73  ns to PoshCode's
47c0: 20 73 70 61 6d 20 66 69 6c 74 65 72 2e 20 42 61   spam filter. Ba
47d0: 63 6b 74 69 63 6b 73 20 61 72 65 20 6e 6f 74 20  ckticks are not 
47e0: 6e 65 65 64 20 69 6e 20 74 68 65 20 69 6e 70 75  need in the inpu
47f0: 74 2c 20 61 6e 64 20 73 70 61 63 65 73 20 64 6f  t, and spaces do
4800: 20 6e 6f 74 20 61 70 70 65 61 72 20 69 6e 20 74   not appear in t
4810: 68 65 20 61 63 74 75 61 6c 20 6f 75 74 70 75 74  he actual output
4820: 2e 0d 0a 23 0d 0a 23 0d 0a 23 2e 45 78 61 6d 70  ...#..#..#.Examp
4830: 6c 65 20 0d 0a 23 20 5b 58 4e 61 6d 65 73 70 61  le ..# [XNamespa
4840: 63 65 5d 24 61 74 6f 6d 3d 22 68 74 74 70 60 3a  ce]$atom="http`:
4850: 2f 2f 77 77 77 2e 77 33 2e 6f 72 67 2f 32 30 30  //www.w3.org/200
4860: 35 2f 41 74 6f 6d 22 0d 0a 23 20 43 3a 5c 50 53  5/Atom"..# C:\PS
4870: 3e 5b 58 4e 61 6d 65 73 70 61 63 65 5d 24 64 63  >[XNamespace]$dc
4880: 20 3d 20 22 68 74 74 70 60 3a 2f 2f 70 75 72 6c   = "http`://purl
4890: 2e 6f 72 67 2f 64 63 2f 65 6c 65 6d 65 6e 74 73  .org/dc/elements
48a0: 2f 31 2e 31 22 0d 0a 23 20 0d 0a 23 20 43 3a 5c  /1.1"..# ..# C:\
48b0: 50 53 3e 4e 65 77 2d 58 44 6f 63 75 6d 65 6e 74  PS>New-XDocument
48c0: 20 28 24 61 74 6f 6d 20 2b 20 22 66 65 65 64 22   ($atom + "feed"
48d0: 29 20 2d 45 6e 63 6f 64 69 6e 67 20 22 55 54 46  ) -Encoding "UTF
48e0: 2d 31 36 22 20 2d 24 28 5b 58 4e 61 6d 65 73 70  -16" -$([XNamesp
48f0: 61 63 65 5d 3a 3a 58 6d 6c 20 2b 27 6c 61 6e 67  ace]::Xml +'lang
4900: 27 29 20 22 65 6e 2d 55 53 22 20 2d 64 63 20 24  ') "en-US" -dc $
4910: 64 63 20 7b 0d 0a 23 20 20 20 20 74 69 74 6c 65  dc {..#    title
4920: 20 7b 22 54 65 73 74 20 46 69 72 73 74 20 45 6e   {"Test First En
4930: 74 72 79 22 7d 0d 0a 23 20 20 20 20 6c 69 6e 6b  try"}..#    link
4940: 20 7b 22 68 74 74 70 60 3a 2f 2f 48 75 64 64 6c   {"http`://Huddl
4950: 65 64 4d 61 73 73 65 73 2e 6f 72 67 22 7d 0d 0a  edMasses.org"}..
4960: 23 20 20 20 20 75 70 64 61 74 65 64 20 7b 28 47  #    updated {(G
4970: 65 74 2d 44 61 74 65 20 2d 66 20 75 29 20 2d 72  et-Date -f u) -r
4980: 65 70 6c 61 63 65 20 22 20 22 2c 22 54 22 7d 0d  eplace " ","T"}.
4990: 0a 23 20 20 20 20 61 75 74 68 6f 72 20 7b 0d 0a  .#    author {..
49a0: 23 20 20 20 20 20 20 20 6e 61 6d 65 20 7b 22 4a  #       name {"J
49b0: 6f 65 6c 20 42 65 6e 6e 65 74 74 22 7d 0d 0a 23  oel Bennett"}..#
49c0: 20 20 20 20 20 20 20 75 72 69 20 7b 22 68 74 74         uri {"htt
49d0: 70 60 3a 2f 2f 48 75 64 64 6c 65 64 4d 61 73 73  p`://HuddledMass
49e0: 65 73 2e 6f 72 67 22 7d 0d 0a 23 20 20 20 20 7d  es.org"}..#    }
49f0: 0d 0a 23 20 20 20 20 69 64 20 7b 22 68 74 74 70  ..#    id {"http
4a00: 60 3a 2f 2f 68 75 64 64 6c 65 64 6d 61 73 73 65  `://huddledmasse
4a10: 73 2e 6f 72 67 2f 22 20 7d 0d 0a 23 0d 0a 23 20  s.org/" }..#..# 
4a20: 20 20 20 65 6e 74 72 79 20 7b 0d 0a 23 20 20 20     entry {..#   
4a30: 20 20 20 20 74 69 74 6c 65 20 7b 22 54 65 73 74      title {"Test
4a40: 20 46 69 72 73 74 20 45 6e 74 72 79 22 7d 0d 0a   First Entry"}..
4a50: 23 20 20 20 20 20 20 20 6c 69 6e 6b 20 7b 22 68  #       link {"h
4a60: 74 74 70 60 3a 2f 2f 48 75 64 64 6c 65 64 4d 61  ttp`://HuddledMa
4a70: 73 73 65 73 2e 6f 72 67 2f 6e 65 77 2d 73 69 74  sses.org/new-sit
4a80: 65 2d 6e 65 77 2d 6c 61 79 6f 75 74 2d 6c 6f 73  e-new-layout-los
4a90: 74 2d 70 6f 73 74 73 2f 22 20 7d 0d 0a 23 20 20  t-posts/" }..#  
4aa0: 20 20 20 20 20 69 64 20 7b 22 68 74 74 70 60 3a       id {"http`:
4ab0: 2f 2f 68 75 64 64 6c 65 64 6d 61 73 73 65 73 2e  //huddledmasses.
4ac0: 6f 72 67 2f 6e 65 77 2d 73 69 74 65 2d 6e 65 77  org/new-site-new
4ad0: 2d 6c 61 79 6f 75 74 2d 6c 6f 73 74 2d 70 6f 73  -layout-lost-pos
4ae0: 74 73 2f 22 20 7d 0d 0a 23 20 20 20 20 20 20 20  ts/" }..#       
4af0: 75 70 64 61 74 65 64 20 7b 28 47 65 74 2d 44 61  updated {(Get-Da
4b00: 74 65 20 31 30 2f 33 31 2f 32 30 30 33 20 2d 66  te 10/31/2003 -f
4b10: 20 75 29 20 2d 72 65 70 6c 61 63 65 20 22 20 22   u) -replace " "
4b20: 2c 22 54 22 7d 0d 0a 23 20 20 20 20 20 20 20 73  ,"T"}..#       s
4b30: 75 6d 6d 61 72 79 20 7b 22 45 6d 61 20 4c 61 7a  ummary {"Ema Laz
4b40: 61 72 75 73 27 20 50 6f 65 6d 22 7d 0d 0a 23 20  arus' Poem"}..# 
4b50: 20 20 20 20 20 20 6c 69 6e 6b 20 2d 72 65 6c 20        link -rel 
4b60: 6c 69 63 65 6e 73 65 20 2d 68 72 65 66 20 22 68  license -href "h
4b70: 74 74 70 60 3a 2f 2f 63 72 65 61 74 69 76 65 63  ttp`://creativec
4b80: 6f 6d 6d 6f 6e 73 2e 6f 72 67 2f 6c 69 63 65 6e  ommons.org/licen
4b90: 73 65 73 2f 62 79 2f 33 2e 30 2f 22 20 2d 74 69  ses/by/3.0/" -ti
4ba0: 74 6c 65 20 22 43 43 20 42 79 2d 41 74 74 72 69  tle "CC By-Attri
4bb0: 62 75 74 69 6f 6e 22 0d 0a 23 20 20 20 20 20 20  bution"..#      
4bc0: 20 64 63 3a 72 69 67 68 74 73 20 7b 20 22 43 6f   dc:rights { "Co
4bd0: 70 79 72 69 67 68 74 20 32 30 30 39 2c 20 53 6f  pyright 2009, So
4be0: 6d 65 20 72 69 67 68 74 73 20 72 65 73 65 72 76  me rights reserv
4bf0: 65 64 20 28 6c 69 63 65 6e 73 65 64 20 75 6e 64  ed (licensed und
4c00: 65 72 20 74 68 65 20 43 72 65 61 74 69 76 65 20  er the Creative 
4c10: 43 6f 6d 6d 6f 6e 73 20 41 74 74 72 69 62 75 74  Commons Attribut
4c20: 69 6f 6e 20 33 2e 30 20 55 6e 70 6f 72 74 65 64  ion 3.0 Unported
4c30: 20 6c 69 63 65 6e 73 65 29 22 20 7d 0d 0a 23 20   license)" }..# 
4c40: 20 20 20 20 20 20 63 61 74 65 67 6f 72 79 20 2d        category -
4c50: 73 63 68 65 6d 65 20 22 68 74 74 70 60 3a 2f 2f  scheme "http`://
4c60: 68 75 64 64 6c 65 64 6d 61 73 73 65 73 2e 6f 72  huddledmasses.or
4c70: 67 2f 74 61 67 2f 22 20 2d 74 65 72 6d 20 22 68  g/tag/" -term "h
4c80: 75 64 64 6c 65 64 2d 6d 61 73 73 65 73 22 0d 0a  uddled-masses"..
4c90: 23 20 20 20 20 7d 0d 0a 23 20 7d 20 7c 20 25 20  #    }..# } | % 
4ca0: 7b 20 24 5f 2e 44 65 63 6c 61 72 61 74 69 6f 6e  { $_.Declaration
4cb0: 2e 54 6f 53 74 72 69 6e 67 28 29 3b 20 24 5f 2e  .ToString(); $_.
4cc0: 54 6f 53 74 72 69 6e 67 28 29 20 7d 0d 0a 23 0d  ToString() }..#.
4cd0: 0a 23 20 3c 3f 78 6d 6c 20 76 65 72 73 69 6f 6e  .# <?xml version
4ce0: 3d 22 31 2e 30 22 20 65 6e 63 6f 64 69 6e 67 3d  ="1.0" encoding=
4cf0: 22 55 54 46 2d 31 36 22 20 73 74 61 6e 64 61 6c  "UTF-16" standal
4d00: 6f 6e 65 3d 22 79 65 73 22 3f 3e 0d 0a 23 20 3c  one="yes"?>..# <
4d10: 66 65 65 64 20 78 6d 6c 3a 6c 61 6e 67 3d 22 65  feed xml:lang="e
4d20: 6e 2d 55 53 22 20 78 6d 6c 6e 73 3d 22 68 74 74  n-US" xmlns="htt
4d30: 70 20 3a 2f 2f 77 77 77 2e 77 33 2e 6f 72 67 2f  p ://www.w3.org/
4d40: 32 30 30 35 2f 41 74 6f 6d 22 3e 0d 0a 23 20 20  2005/Atom">..#  
4d50: 20 3c 74 69 74 6c 65 3e 54 65 73 74 20 46 69 72   <title>Test Fir
4d60: 73 74 20 45 6e 74 72 79 3c 2f 74 69 74 6c 65 3e  st Entry</title>
4d70: 0d 0a 23 20 20 20 3c 6c 69 6e 6b 3e 68 74 74 70  ..#   <link>http
4d80: 20 3a 2f 2f 48 75 64 64 6c 65 64 4d 61 73 73 65   ://HuddledMasse
4d90: 73 2e 6f 72 67 3c 2f 6c 69 6e 6b 3e 0d 0a 23 20  s.org</link>..# 
4da0: 20 20 3c 75 70 64 61 74 65 64 3e 32 30 30 39 2d    <updated>2009-
4db0: 30 37 2d 32 39 54 31 37 3a 32 35 3a 34 39 5a 3c  07-29T17:25:49Z<
4dc0: 2f 75 70 64 61 74 65 64 3e 0d 0a 23 20 20 20 3c  /updated>..#   <
4dd0: 61 75 74 68 6f 72 3e 0d 0a 23 20 20 20 20 20 20  author>..#      
4de0: 3c 6e 61 6d 65 3e 4a 6f 65 6c 20 42 65 6e 6e 65  <name>Joel Benne
4df0: 74 74 3c 2f 6e 61 6d 65 3e 0d 0a 23 20 20 20 20  tt</name>..#    
4e00: 20 20 3c 75 72 69 3e 68 74 74 70 20 3a 2f 2f 48    <uri>http ://H
4e10: 75 64 64 6c 65 64 4d 61 73 73 65 73 2e 6f 72 67  uddledMasses.org
4e20: 3c 2f 75 72 69 3e 0d 0a 23 20 20 20 3c 2f 61 75  </uri>..#   </au
4e30: 74 68 6f 72 3e 0d 0a 23 20 20 20 3c 69 64 3e 68  thor>..#   <id>h
4e40: 74 74 70 20 3a 2f 2f 68 75 64 64 6c 65 64 6d 61  ttp ://huddledma
4e50: 73 73 65 73 2e 6f 72 67 2f 3c 2f 69 64 3e 0d 0a  sses.org/</id>..
4e60: 23 20 20 20 3c 65 6e 74 72 79 3e 0d 0a 23 20 20  #   <entry>..#  
4e70: 20 20 20 3c 74 69 74 6c 65 3e 54 65 73 74 20 46     <title>Test F
4e80: 69 72 73 74 20 45 6e 74 72 79 3c 2f 74 69 74 6c  irst Entry</titl
4e90: 65 3e 0d 0a 23 20 20 20 20 20 3c 6c 69 6e 6b 3e  e>..#     <link>
4ea0: 68 74 74 70 20 3a 2f 2f 48 75 64 64 6c 65 64 4d  http ://HuddledM
4eb0: 61 73 73 65 73 2e 6f 72 67 2f 6e 65 77 2d 73 69  asses.org/new-si
4ec0: 74 65 2d 6e 65 77 2d 6c 61 79 6f 75 74 2d 6c 6f  te-new-layout-lo
4ed0: 73 74 2d 70 6f 73 74 73 2f 3c 2f 6c 69 6e 6b 3e  st-posts/</link>
4ee0: 0d 0a 23 20 20 20 20 20 3c 69 64 3e 68 74 74 70  ..#     <id>http
4ef0: 20 3a 2f 2f 68 75 64 64 6c 65 64 6d 61 73 73 65   ://huddledmasse
4f00: 73 2e 6f 72 67 2f 6e 65 77 2d 73 69 74 65 2d 6e  s.org/new-site-n
4f10: 65 77 2d 6c 61 79 6f 75 74 2d 6c 6f 73 74 2d 70  ew-layout-lost-p
4f20: 6f 73 74 73 2f 3c 2f 69 64 3e 0d 0a 23 20 20 20  osts/</id>..#   
4f30: 20 20 3c 75 70 64 61 74 65 64 3e 32 30 30 33 2d    <updated>2003-
4f40: 31 30 2d 33 31 54 30 30 3a 30 30 3a 30 30 5a 3c  10-31T00:00:00Z<
4f50: 2f 75 70 64 61 74 65 64 3e 0d 0a 23 20 20 20 20  /updated>..#    
4f60: 20 3c 73 75 6d 6d 61 72 79 3e 45 6d 61 20 4c 61   <summary>Ema La
4f70: 7a 61 72 75 73 27 20 50 6f 65 6d 3c 2f 73 75 6d  zarus' Poem</sum
4f80: 6d 61 72 79 3e 0d 0a 23 20 20 20 20 20 3c 6c 69  mary>..#     <li
4f90: 6e 6b 20 72 65 6c 3d 22 6c 69 63 65 6e 73 65 22  nk rel="license"
4fa0: 20 68 72 65 66 3d 22 68 74 74 70 20 3a 2f 2f 63   href="http ://c
4fb0: 72 65 61 74 69 76 65 63 6f 6d 6d 6f 6e 73 2e 6f  reativecommons.o
4fc0: 72 67 2f 6c 69 63 65 6e 73 65 73 2f 62 79 2f 33  rg/licenses/by/3
4fd0: 2e 30 2f 22 20 74 69 74 6c 65 3d 22 43 43 20 42  .0/" title="CC B
4fe0: 79 2d 41 74 74 72 69 62 75 74 69 6f 6e 22 20 2f  y-Attribution" /
4ff0: 3e 0d 0a 23 20 20 20 20 20 3c 64 63 3a 72 69 67  >..#     <dc:rig
5000: 68 74 73 3e 43 6f 70 79 72 69 67 68 74 20 32 30  hts>Copyright 20
5010: 30 39 2c 20 53 6f 6d 65 20 72 69 67 68 74 73 20  09, Some rights 
5020: 72 65 73 65 72 76 65 64 20 28 6c 69 63 65 6e 73  reserved (licens
5030: 65 64 20 75 6e 64 65 72 20 74 68 65 20 43 72 65  ed under the Cre
5040: 61 74 69 76 65 20 43 6f 6d 6d 6f 6e 73 20 41 74  ative Commons At
5050: 74 72 69 62 75 74 69 6f 6e 20 33 2e 30 20 55 6e  tribution 3.0 Un
5060: 70 6f 72 74 65 64 20 6c 69 63 65 6e 73 65 29 3c  ported license)<
5070: 2f 64 63 3a 72 69 67 68 74 73 3e 0d 0a 23 20 20  /dc:rights>..#  
5080: 20 20 20 3c 63 61 74 65 67 6f 72 79 20 73 63 68     <category sch
5090: 65 6d 65 3d 22 68 74 74 70 20 3a 2f 2f 68 75 64  eme="http ://hud
50a0: 64 6c 65 64 6d 61 73 73 65 73 2e 6f 72 67 2f 74  dledmasses.org/t
50b0: 61 67 2f 22 20 74 65 72 6d 3d 22 68 75 64 64 6c  ag/" term="huddl
50c0: 65 64 2d 6d 61 73 73 65 73 22 20 2f 3e 0d 0a 23  ed-masses" />..#
50d0: 20 20 20 3c 2f 65 6e 74 72 79 3e 0d 0a 23 20 3c     </entry>..# <
50e0: 2f 66 65 65 64 3e 0d 0a 23 0d 0a 23 0d 0a 23 20  /feed>..#..#..# 
50f0: 44 65 73 63 72 69 70 74 69 6f 6e 0d 0a 23 20 2d  Description..# -
5100: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0d 0a 23 20 54 68  ----------..# Th
5110: 69 73 20 65 78 61 6d 70 6c 65 20 73 68 6f 77 73  is example shows
5120: 20 74 68 65 20 75 73 65 20 6f 66 20 61 20 64 65   the use of a de
5130: 66 61 75 6c 74 20 6e 61 6d 65 73 70 61 63 65 2c  fault namespace,
5140: 20 61 73 20 77 65 6c 6c 20 61 73 20 61 64 64 69   as well as addi
5150: 74 69 6f 6e 61 6c 20 73 70 65 63 69 66 69 63 20  tional specific 
5160: 6e 61 6d 65 73 70 61 63 65 73 20 66 6f 72 20 74  namespaces for t
5170: 68 65 20 22 64 63 22 20 6e 61 6d 65 73 70 61 63  he "dc" namespac
5180: 65 2e 20 49 74 20 61 6c 73 6f 20 64 65 6d 6f 6e  e. It also demon
5190: 73 74 72 61 74 65 73 20 68 6f 77 20 79 6f 75 20  strates how you 
51a0: 63 61 6e 20 67 65 74 20 74 68 65 20 3c 3f 78 6d  can get the <?xm
51b0: 6c 3f 3e 20 64 65 63 6c 61 72 61 74 69 6f 6e 20  l?> declaration 
51c0: 77 68 69 63 68 20 64 6f 65 73 20 6e 6f 74 20 61  which does not a
51d0: 70 70 65 61 72 20 69 6e 20 61 20 73 69 6d 70 6c  ppear in a simpl
51e0: 65 20 2e 54 6f 53 74 72 69 6e 67 28 29 2e 0d 0a  e .ToString()...
51f0: 23 0d 0a 23 20 4e 4f 54 45 20 74 68 61 74 20 74  #..# NOTE that t
5200: 68 65 20 62 61 63 6b 74 69 63 6b 20 69 6e 20 74  he backtick in t
5210: 68 65 20 68 74 74 70 60 3a 20 69 6e 20 74 68 65  he http`: in the
5220: 20 55 52 4c 73 20 69 6e 20 74 68 65 20 69 6e 70   URLs in the inp
5230: 75 74 20 69 73 20 75 6e 65 63 65 73 73 61 72 79  ut is unecessary
5240: 2c 20 61 6e 64 20 49 20 61 64 64 65 64 20 74 68  , and I added th
5250: 65 20 73 70 61 63 65 20 61 66 74 65 72 20 74 68  e space after th
5260: 65 20 68 74 74 70 3a 20 69 6e 20 74 68 65 20 55  e http: in the U
5270: 52 4c 73 20 20 69 6e 20 74 68 65 20 6f 75 74 70  RLs  in the outp
5280: 75 74 20 2d 2d 20 74 68 65 73 65 20 61 72 65 20  ut -- these are 
5290: 61 63 63 6f 6d 6f 64 61 74 69 6f 6e 73 20 74 6f  accomodations to
52a0: 20 50 6f 73 68 43 6f 64 65 27 73 20 73 70 61 6d   PoshCode's spam
52b0: 20 66 69 6c 74 65 72 2e 20 42 61 63 6b 74 69 63   filter. Backtic
52c0: 6b 73 20 61 72 65 20 6e 6f 74 20 6e 65 65 64 20  ks are not need 
52d0: 69 6e 20 74 68 65 20 69 6e 70 75 74 2c 20 61 6e  in the input, an
52e0: 64 20 73 70 61 63 65 73 20 64 6f 20 6e 6f 74 20  d spaces do not 
52f0: 61 70 70 65 61 72 20 69 6e 20 74 68 65 20 61 63  appear in the ac
5300: 74 75 61 6c 20 6f 75 74 70 75 74 2e 23 0d 0a 23  tual output.#..#
5310: 20 0d 0a 50 61 72 61 6d 28 0d 0a 20 20 20 5b 50   ..Param(..   [P
5320: 61 72 61 6d 65 74 65 72 28 4d 61 6e 64 61 74 6f  arameter(Mandato
5330: 72 79 20 3d 20 24 74 72 75 65 2c 20 50 6f 73 69  ry = $true, Posi
5340: 74 69 6f 6e 20 3d 20 30 29 5d 0d 0a 20 20 20 5b  tion = 0)]..   [
5350: 53 79 73 74 65 6d 2e 58 6d 6c 2e 4c 69 6e 71 2e  System.Xml.Linq.
5360: 58 4e 61 6d 65 5d 24 72 6f 6f 74 0d 0a 2c 0d 0a  XName]$root..,..
5370: 20 20 20 5b 50 61 72 61 6d 65 74 65 72 28 4d 61     [Parameter(Ma
5380: 6e 64 61 74 6f 72 79 20 3d 20 24 66 61 6c 73 65  ndatory = $false
5390: 29 5d 0d 0a 20 20 20 5b 73 74 72 69 6e 67 5d 24  )]..   [string]$
53a0: 56 65 72 73 69 6f 6e 20 3d 20 22 31 2e 30 22 0d  Version = "1.0".
53b0: 0a 2c 0d 0a 20 20 20 5b 50 61 72 61 6d 65 74 65  .,..   [Paramete
53c0: 72 28 4d 61 6e 64 61 74 6f 72 79 20 3d 20 24 66  r(Mandatory = $f
53d0: 61 6c 73 65 29 5d 0d 0a 20 20 20 5b 73 74 72 69  alse)]..   [stri
53e0: 6e 67 5d 24 45 6e 63 6f 64 69 6e 67 20 3d 20 22  ng]$Encoding = "
53f0: 55 54 46 2d 38 22 0d 0a 2c 0d 0a 20 20 20 5b 50  UTF-8"..,..   [P
5400: 61 72 61 6d 65 74 65 72 28 4d 61 6e 64 61 74 6f  arameter(Mandato
5410: 72 79 20 3d 20 24 66 61 6c 73 65 29 5d 0d 0a 20  ry = $false)].. 
5420: 20 20 5b 73 74 72 69 6e 67 5d 24 53 74 61 6e 64    [string]$Stand
5430: 61 6c 6f 6e 65 20 3d 20 22 79 65 73 22 0d 0a 2c  alone = "yes"..,
5440: 0d 0a 20 20 20 5b 50 61 72 61 6d 65 74 65 72 28  ..   [Parameter(
5450: 50 6f 73 69 74 69 6f 6e 3d 39 39 2c 20 4d 61 6e  Position=99, Man
5460: 64 61 74 6f 72 79 20 3d 20 24 66 61 6c 73 65 2c  datory = $false,
5470: 20 56 61 6c 75 65 46 72 6f 6d 52 65 6d 61 69 6e   ValueFromRemain
5480: 69 6e 67 41 72 67 75 6d 65 6e 74 73 3d 24 74 72  ingArguments=$tr
5490: 75 65 29 5d 0d 0a 20 20 20 5b 50 53 4f 62 6a 65  ue)]..   [PSObje
54a0: 63 74 5b 5d 5d 24 61 72 67 73 0d 0a 29 0d 0a 42  ct[]]$args..)..B
54b0: 45 47 49 4e 20 7b 0d 0a 20 20 20 24 73 63 72 69  EGIN {..   $scri
54c0: 70 74 3a 4e 61 6d 65 53 70 61 63 65 48 61 73 68  pt:NameSpaceHash
54d0: 20 3d 20 4e 65 77 2d 4f 62 6a 65 63 74 20 27 44   = New-Object 'D
54e0: 69 63 74 69 6f 6e 61 72 79 5b 53 74 72 69 6e 67  ictionary[String
54f0: 2c 58 4e 61 6d 65 73 70 61 63 65 5d 27 0d 0a 20  ,XNamespace]'.. 
5500: 20 20 69 66 28 24 72 6f 6f 74 2e 4e 61 6d 65 73    if($root.Names
5510: 70 61 63 65 4e 61 6d 65 29 20 7b 0d 0a 20 20 20  paceName) {..   
5520: 20 20 20 24 73 63 72 69 70 74 3a 4e 61 6d 65 53     $script:NameS
5530: 70 61 63 65 48 61 73 68 2e 41 64 64 28 22 22 2c  paceHash.Add("",
5540: 20 24 72 6f 6f 74 2e 4e 61 6d 65 73 70 61 63 65   $root.Namespace
5550: 29 0d 0a 20 20 20 7d 0d 0a 7d 0d 0a 50 52 4f 43  )..   }..}..PROC
5560: 45 53 53 20 7b 0d 0a 20 20 20 4e 65 77 2d 4f 62  ESS {..   New-Ob
5570: 6a 65 63 74 20 58 44 6f 63 75 6d 65 6e 74 20 28  ject XDocument (
5580: 4e 65 77 2d 4f 62 6a 65 63 74 20 58 44 65 63 6c  New-Object XDecl
5590: 61 72 61 74 69 6f 6e 20 24 56 65 72 73 69 6f 6e  aration $Version
55a0: 2c 20 24 45 6e 63 6f 64 69 6e 67 2c 20 24 73 74  , $Encoding, $st
55b0: 61 6e 64 61 6c 6f 6e 65 29 2c 28 0d 0a 20 20 20  andalone),(..   
55c0: 20 20 20 4e 65 77 2d 4f 62 6a 65 63 74 20 58 45     New-Object XE
55d0: 6c 65 6d 65 6e 74 20 24 28 0d 0a 20 20 20 20 20  lement $(..     
55e0: 20 20 20 20 24 72 6f 6f 74 0d 0a 20 20 20 20 20      $root..     
55f0: 20 20 20 20 77 68 69 6c 65 28 24 61 72 67 73 29      while($args)
5600: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
5610: 24 61 74 74 72 69 62 2c 20 24 76 61 6c 75 65 2c  $attrib, $value,
5620: 20 24 61 72 67 73 20 3d 20 24 61 72 67 73 0d 0a   $args = $args..
5630: 20 20 20 20 20 20 20 20 20 20 20 20 69 66 28 24              if($
5640: 61 74 74 72 69 62 20 2d 69 73 20 5b 53 63 72 69  attrib -is [Scri
5650: 70 74 42 6c 6f 63 6b 5d 29 20 7b 0d 0a 20 20 20  ptBlock]) {..   
5660: 20 20 20 20 20 20 20 20 20 20 20 20 23 20 57 72              # Wr
5670: 69 74 65 2d 56 65 72 62 6f 73 65 20 22 50 72 65  ite-Verbose "Pre
5680: 70 61 72 73 65 64 20 44 53 4c 3a 20 24 61 74 74  parsed DSL: $att
5690: 72 69 62 22 0d 0a 20 20 20 20 20 20 20 20 20 20  rib"..          
56a0: 20 20 20 20 20 24 61 74 74 72 69 62 20 3d 20 43       $attrib = C
56b0: 6f 6e 76 65 72 74 46 72 6f 6d 2d 58 6d 6c 44 73  onvertFrom-XmlDs
56c0: 6c 20 24 61 74 74 72 69 62 0d 0a 20 20 20 20 20  l $attrib..     
56d0: 20 20 20 20 20 20 20 20 20 20 57 72 69 74 65 2d            Write-
56e0: 56 65 72 62 6f 73 65 20 22 52 65 70 61 72 73 65  Verbose "Reparse
56f0: 64 20 44 53 4c 3a 20 24 61 74 74 72 69 62 22 0d  d DSL: $attrib".
5700: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
5710: 26 24 61 74 74 72 69 62 0d 0a 20 20 20 20 20 20  &$attrib..      
5720: 20 20 20 20 20 20 7d 20 65 6c 73 65 69 66 20 28        } elseif (
5730: 20 24 76 61 6c 75 65 20 2d 69 73 20 5b 53 63 72   $value -is [Scr
5740: 69 70 74 42 6c 6f 63 6b 5d 20 2d 61 6e 64 20 22  iptBlock] -and "
5750: 2d 43 6f 6e 74 65 6e 74 22 2e 53 74 61 72 74 73  -Content".Starts
5760: 57 69 74 68 28 24 61 74 74 72 69 62 29 29 20 7b  With($attrib)) {
5770: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
5780: 20 24 76 61 6c 75 65 20 3d 20 43 6f 6e 76 65 72   $value = Conver
5790: 74 46 72 6f 6d 2d 58 6d 6c 44 73 6c 20 24 76 61  tFrom-XmlDsl $va
57a0: 6c 75 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20  lue..           
57b0: 20 20 20 20 26 24 76 61 6c 75 65 0d 0a 20 20 20      &$value..   
57c0: 20 20 20 20 20 20 20 20 20 7d 20 65 6c 73 65 69           } elsei
57d0: 66 20 28 20 24 76 61 6c 75 65 20 2d 69 73 20 5b  f ( $value -is [
57e0: 58 4e 61 6d 65 73 70 61 63 65 5d 29 20 7b 0d 0a  XNamespace]) {..
57f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 4e                 N
5800: 65 77 2d 4f 62 6a 65 63 74 20 58 41 74 74 72 69  ew-Object XAttri
5810: 62 75 74 65 20 28 5b 58 4e 61 6d 65 73 70 61 63  bute ([XNamespac
5820: 65 5d 3a 3a 58 6d 6c 6e 73 20 2b 20 24 61 74 74  e]::Xmlns + $att
5830: 72 69 62 2e 54 72 69 6d 53 74 61 72 74 28 22 2d  rib.TrimStart("-
5840: 22 29 29 2c 20 24 76 61 6c 75 65 0d 0a 20 20 20  ")), $value..   
5850: 20 20 20 20 20 20 20 20 20 20 20 20 24 73 63 72              $scr
5860: 69 70 74 3a 4e 61 6d 65 53 70 61 63 65 48 61 73  ipt:NameSpaceHas
5870: 68 2e 41 64 64 28 24 61 74 74 72 69 62 2e 54 72  h.Add($attrib.Tr
5880: 69 6d 53 74 61 72 74 28 22 2d 22 29 2c 20 24 76  imStart("-"), $v
5890: 61 6c 75 65 29 0d 0a 20 20 20 20 20 20 20 20 20  alue)..         
58a0: 20 20 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 20     } else {..   
58b0: 20 20 20 20 20 20 20 20 20 20 20 20 4e 65 77 2d              New-
58c0: 4f 62 6a 65 63 74 20 58 41 74 74 72 69 62 75 74  Object XAttribut
58d0: 65 20 24 61 74 74 72 69 62 2e 54 72 69 6d 53 74  e $attrib.TrimSt
58e0: 61 72 74 28 22 2d 22 29 2c 20 24 76 61 6c 75 65  art("-"), $value
58f0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d  ..            }.
5900: 0a 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20  .         }..   
5910: 20 20 20 29 29 0d 0a 7d 0d 0a 7d 0d 0a 0d 0a 53     ))..}..}....S
5920: 65 74 2d 41 6c 69 61 73 20 78 6d 6c 20 4e 65 77  et-Alias xml New
5930: 2d 58 44 6f 63 75 6d 65 6e 74 20 2d 45 41 20 30  -XDocument -EA 0
5940: 0d 0a 53 65 74 2d 41 6c 69 61 73 20 4e 65 77 2d  ..Set-Alias New-
5950: 58 6d 6c 20 4e 65 77 2d 58 44 6f 63 75 6d 65 6e  Xml New-XDocumen
5960: 74 20 2d 45 41 20 30 0d 0a 0d 0a 66 75 6e 63 74  t -EA 0....funct
5970: 69 6f 6e 20 4e 65 77 2d 58 41 74 74 72 69 62 75  ion New-XAttribu
5980: 74 65 20 7b 0d 0a 23 2e 53 79 6e 6f 70 73 79 73  te {..#.Synopsys
5990: 0d 0a 23 20 20 20 43 72 65 61 74 65 73 20 61 20  ..#   Creates a 
59a0: 6e 65 77 20 58 41 74 74 72 69 62 75 74 65 20 28  new XAttribute (
59b0: 61 6e 20 78 6d 6c 20 61 74 74 72 69 62 75 74 65  an xml attribute
59c0: 20 6f 6e 20 61 6e 20 58 45 6c 65 6d 65 6e 74 20   on an XElement 
59d0: 66 6f 72 20 58 44 6f 63 75 6d 65 6e 74 29 0d 0a  for XDocument)..
59e0: 23 2e 44 65 73 63 72 69 70 74 69 6f 6e 0d 0a 23  #.Description..#
59f0: 20 20 54 68 69 73 20 69 73 20 74 68 65 20 77 6f    This is the wo
5a00: 72 6b 2d 68 6f 72 73 65 20 66 6f 72 20 74 68 65  rk-horse for the
5a10: 20 58 4d 4c 20 6d 69 6e 69 2d 64 73 6c 0d 0a 23   XML mini-dsl..#
5a20: 2e 50 61 72 61 6d 65 74 65 72 20 6e 61 6d 65 0d  .Parameter name.
5a30: 0a 23 20 20 20 54 68 65 20 61 74 74 72 69 62 75  .#   The attribu
5a40: 74 65 20 6e 61 6d 65 0d 0a 23 2e 50 61 72 61 6d  te name..#.Param
5a50: 65 74 65 72 20 76 61 6c 75 65 0d 0a 23 20 20 54  eter value..#  T
5a60: 68 65 20 61 74 74 72 69 62 75 74 65 20 76 61 6c  he attribute val
5a70: 75 65 0d 0a 50 61 72 61 6d 28 5b 50 61 72 61 6d  ue..Param([Param
5a80: 65 74 65 72 28 4d 61 6e 64 61 74 6f 72 79 3d 24  eter(Mandatory=$
5a90: 74 72 75 65 29 5d 24 6e 61 6d 65 2c 5b 50 61 72  true)]$name,[Par
5aa0: 61 6d 65 74 65 72 28 4d 61 6e 64 61 74 6f 72 79  ameter(Mandatory
5ab0: 3d 24 74 72 75 65 29 5d 24 76 61 6c 75 65 29 0d  =$true)]$value).
5ac0: 0a 20 20 20 4e 65 77 2d 4f 62 6a 65 63 74 20 58  .   New-Object X
5ad0: 41 74 74 72 69 62 75 74 65 20 24 6e 61 6d 65 2c  Attribute $name,
5ae0: 20 24 76 61 6c 75 65 0d 0a 7d 0d 0a 53 65 74 2d   $value..}..Set-
5af0: 41 6c 69 61 73 20 78 61 20 4e 65 77 2d 58 41 74  Alias xa New-XAt
5b00: 74 72 69 62 75 74 65 20 2d 45 41 20 30 0d 0a 53  tribute -EA 0..S
5b10: 65 74 2d 41 6c 69 61 73 20 4e 65 77 2d 58 6d 6c  et-Alias New-Xml
5b20: 41 74 74 72 69 62 75 74 65 20 4e 65 77 2d 58 41  Attribute New-XA
5b30: 74 74 72 69 62 75 74 65 20 2d 45 41 20 30 0d 0a  ttribute -EA 0..
5b40: 0d 0a 0d 0a 66 75 6e 63 74 69 6f 6e 20 4e 65 77  ....function New
5b50: 2d 58 45 6c 65 6d 65 6e 74 20 7b 0d 0a 23 2e 53  -XElement {..#.S
5b60: 79 6e 6f 70 73 79 73 0d 0a 23 20 20 20 43 72 65  ynopsys..#   Cre
5b70: 61 74 65 73 20 61 20 6e 65 77 20 58 45 6c 65 6d  ates a new XElem
5b80: 65 6e 74 20 28 61 6e 20 78 6d 6c 20 74 61 67 20  ent (an xml tag 
5b90: 66 6f 72 20 58 44 6f 63 75 6d 65 6e 74 29 0d 0a  for XDocument)..
5ba0: 23 2e 44 65 73 63 72 69 70 74 69 6f 6e 0d 0a 23  #.Description..#
5bb0: 20 20 54 68 69 73 20 69 73 20 74 68 65 20 77 6f    This is the wo
5bc0: 72 6b 2d 68 6f 72 73 65 20 66 6f 72 20 74 68 65  rk-horse for the
5bd0: 20 58 4d 4c 20 6d 69 6e 69 2d 64 73 6c 0d 0a 23   XML mini-dsl..#
5be0: 2e 50 61 72 61 6d 65 74 65 72 20 74 61 67 0d 0a  .Parameter tag..
5bf0: 23 20 20 20 54 68 65 20 6e 61 6d 65 20 6f 66 20  #   The name of 
5c00: 74 68 65 20 78 6d 6c 20 74 61 67 0d 0a 23 2e 50  the xml tag..#.P
5c10: 61 72 61 6d 65 74 65 72 20 61 72 67 73 0d 0a 23  arameter args..#
5c20: 20 20 20 74 68 69 73 20 69 73 20 77 68 65 72 65     this is where
5c30: 20 61 6c 6c 20 74 68 65 20 64 73 6c 20 6d 61 67   all the dsl mag
5c40: 69 63 20 68 61 70 70 65 6e 73 2e 20 50 6c 65 61  ic happens. Plea
5c50: 73 65 20 73 65 65 20 74 68 65 20 45 78 61 6d 70  se see the Examp
5c60: 6c 65 73 2e 20 3a 29 0d 0a 50 61 72 61 6d 28 0d  les. :)..Param(.
5c70: 0a 20 20 20 5b 50 61 72 61 6d 65 74 65 72 28 4d  .   [Parameter(M
5c80: 61 6e 64 61 74 6f 72 79 20 3d 20 24 74 72 75 65  andatory = $true
5c90: 2c 20 50 6f 73 69 74 69 6f 6e 20 3d 20 30 29 5d  , Position = 0)]
5ca0: 0d 0a 20 20 20 5b 53 79 73 74 65 6d 2e 58 6d 6c  ..   [System.Xml
5cb0: 2e 4c 69 6e 71 2e 58 4e 61 6d 65 5d 24 74 61 67  .Linq.XName]$tag
5cc0: 0d 0a 2c 0d 0a 20 20 20 5b 50 61 72 61 6d 65 74  ..,..   [Paramet
5cd0: 65 72 28 50 6f 73 69 74 69 6f 6e 3d 39 39 2c 20  er(Position=99, 
5ce0: 4d 61 6e 64 61 74 6f 72 79 20 3d 20 24 66 61 6c  Mandatory = $fal
5cf0: 73 65 2c 20 56 61 6c 75 65 46 72 6f 6d 52 65 6d  se, ValueFromRem
5d00: 61 69 6e 69 6e 67 41 72 67 75 6d 65 6e 74 73 3d  ainingArguments=
5d10: 24 74 72 75 65 29 5d 0d 0a 20 20 20 5b 50 53 4f  $true)]..   [PSO
5d20: 62 6a 65 63 74 5b 5d 5d 24 61 72 67 73 0d 0a 29  bject[]]$args..)
5d30: 0d 0a 23 20 20 42 45 47 49 4e 20 7b 0d 0a 20 20  ..#  BEGIN {..  
5d40: 20 23 20 20 69 66 28 5b 73 74 72 69 6e 67 5d 3a   #  if([string]:
5d50: 3a 49 73 4e 75 6c 6c 4f 72 45 6d 70 74 79 28 20  :IsNullOrEmpty( 
5d60: 24 74 61 67 2e 4e 61 6d 65 73 70 61 63 65 4e 61  $tag.NamespaceNa
5d70: 6d 65 20 29 29 20 7b 0d 0a 20 20 20 20 20 20 23  me )) {..      #
5d80: 20 20 24 74 61 67 20 3d 20 24 28 24 73 63 72 69    $tag = $($scri
5d90: 70 74 3a 4e 61 6d 65 53 70 61 63 65 53 74 61 63  pt:NameSpaceStac
5da0: 6b 2e 50 65 65 6b 28 29 29 20 2b 20 24 74 61 67  k.Peek()) + $tag
5db0: 0d 0a 20 20 20 20 20 20 23 20 20 69 66 28 20 24  ..      #  if( $
5dc0: 73 63 72 69 70 74 3a 4e 61 6d 65 53 70 61 63 65  script:NameSpace
5dd0: 53 74 61 63 6b 2e 43 6f 75 6e 74 20 2d 67 74 20  Stack.Count -gt 
5de0: 30 20 29 20 7b 0d 0a 20 20 20 20 20 20 20 20 20  0 ) {..         
5df0: 23 20 20 24 73 63 72 69 70 74 3a 4e 61 6d 65 53  #  $script:NameS
5e00: 70 61 63 65 53 74 61 63 6b 2e 50 75 73 68 28 20  paceStack.Push( 
5e10: 24 73 63 72 69 70 74 3a 4e 61 6d 65 53 70 61 63  $script:NameSpac
5e20: 65 53 74 61 63 6b 2e 50 65 65 6b 28 29 20 29 0d  eStack.Peek() ).
5e30: 0a 20 20 20 20 20 20 23 20 20 7d 20 65 6c 73 65  .      #  } else
5e40: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 23 20 20   {..         #  
5e50: 24 73 63 72 69 70 74 3a 4e 61 6d 65 53 70 61 63  $script:NameSpac
5e60: 65 53 74 61 63 6b 2e 50 75 73 68 28 20 24 6e 75  eStack.Push( $nu
5e70: 6c 6c 20 29 0d 0a 20 20 20 20 20 20 23 20 20 7d  ll )..      #  }
5e80: 20 20 20 20 20 20 0d 0a 20 20 20 23 20 20 7d 20        ..   #  } 
5e90: 65 6c 73 65 20 7b 0d 0a 20 20 20 20 20 20 23 20  else {..      # 
5ea0: 20 24 73 63 72 69 70 74 3a 4e 61 6d 65 53 70 61   $script:NameSpa
5eb0: 63 65 53 74 61 63 6b 2e 50 75 73 68 28 20 24 74  ceStack.Push( $t
5ec0: 61 67 2e 4e 61 6d 65 73 70 61 63 65 20 29 0d 0a  ag.Namespace )..
5ed0: 20 20 20 23 20 20 7d 0d 0a 23 20 20 7d 0d 0a 50     #  }..#  }..P
5ee0: 52 4f 43 45 53 53 20 7b 0d 0a 20 20 4e 65 77 2d  ROCESS {..  New-
5ef0: 4f 62 6a 65 63 74 20 58 45 6c 65 6d 65 6e 74 20  Object XElement 
5f00: 24 28 0d 0a 20 20 20 20 20 24 74 61 67 0d 0a 20  $(..     $tag.. 
5f10: 20 20 20 20 77 68 69 6c 65 28 24 61 72 67 73 29      while($args)
5f20: 20 7b 0d 0a 20 20 20 20 20 20 20 20 24 61 74 74   {..        $att
5f30: 72 69 62 2c 20 24 76 61 6c 75 65 2c 20 24 61 72  rib, $value, $ar
5f40: 67 73 20 3d 20 24 61 72 67 73 0d 0a 20 20 20 20  gs = $args..    
5f50: 20 20 20 20 69 66 28 24 61 74 74 72 69 62 20 2d      if($attrib -
5f60: 69 73 20 5b 53 63 72 69 70 74 42 6c 6f 63 6b 5d  is [ScriptBlock]
5f70: 29 20 7b 20 23 20 74 68 65 6e 20 69 74 27 73 20  ) { # then it's 
5f80: 63 6f 6e 74 65 6e 74 0d 0a 20 20 20 20 20 20 20  content..       
5f90: 20 20 20 20 26 24 61 74 74 72 69 62 0d 0a 20 20      &$attrib..  
5fa0: 20 20 20 20 20 20 7d 20 65 6c 73 65 69 66 20 28        } elseif (
5fb0: 20 24 76 61 6c 75 65 20 2d 69 73 20 5b 53 63 72   $value -is [Scr
5fc0: 69 70 74 42 6c 6f 63 6b 5d 20 2d 61 6e 64 20 22  iptBlock] -and "
5fd0: 2d 43 6f 6e 74 65 6e 74 22 2e 53 74 61 72 74 73  -Content".Starts
5fe0: 57 69 74 68 28 24 61 74 74 72 69 62 29 29 20 7b  With($attrib)) {
5ff0: 20 23 20 74 68 65 6e 20 69 74 27 73 20 63 6f 6e   # then it's con
6000: 74 65 6e 74 0d 0a 20 20 20 20 20 20 20 20 20 20  tent..          
6010: 20 26 24 76 61 6c 75 65 0d 0a 20 20 20 20 20 20   &$value..      
6020: 20 20 7d 20 65 6c 73 65 69 66 20 28 20 24 76 61    } elseif ( $va
6030: 6c 75 65 20 2d 69 73 20 5b 58 4e 61 6d 65 73 70  lue -is [XNamesp
6040: 61 63 65 5d 29 20 7b 0d 0a 20 20 20 20 20 20 20  ace]) {..       
6050: 20 20 20 20 4e 65 77 2d 4f 62 6a 65 63 74 20 58      New-Object X
6060: 41 74 74 72 69 62 75 74 65 20 28 5b 58 4e 61 6d  Attribute ([XNam
6070: 65 73 70 61 63 65 5d 3a 3a 58 6d 6c 6e 73 20 2b  espace]::Xmlns +
6080: 20 24 61 74 74 72 69 62 2e 54 72 69 6d 53 74 61   $attrib.TrimSta
6090: 72 74 28 22 2d 22 29 29 2c 20 24 76 61 6c 75 65  rt("-")), $value
60a0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 24 73 63  ..           $sc
60b0: 72 69 70 74 3a 4e 61 6d 65 53 70 61 63 65 48 61  ript:NameSpaceHa
60c0: 73 68 2e 41 64 64 28 24 61 74 74 72 69 62 2e 54  sh.Add($attrib.T
60d0: 72 69 6d 53 74 61 72 74 28 22 2d 22 29 2c 20 24  rimStart("-"), $
60e0: 76 61 6c 75 65 29 0d 0a 20 20 20 20 20 20 20 20  value)..        
60f0: 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 20 20 20 20  } else {..      
6100: 20 20 20 20 20 4e 65 77 2d 4f 62 6a 65 63 74 20       New-Object 
6110: 58 41 74 74 72 69 62 75 74 65 20 24 61 74 74 72  XAttribute $attr
6120: 69 62 2e 54 72 69 6d 53 74 61 72 74 28 22 2d 22  ib.TrimStart("-"
6130: 29 2c 20 24 76 61 6c 75 65 0d 0a 20 20 20 20 20  ), $value..     
6140: 20 20 20 7d 20 20 20 20 20 20 20 20 0d 0a 20 20     }        ..  
6150: 20 20 20 7d 0d 0a 20 20 20 29 0d 0a 7d 0d 0a 23     }..   )..}..#
6160: 20 20 45 4e 44 20 7b 0d 0a 20 20 20 23 20 20 24    END {..   #  $
6170: 6e 75 6c 6c 20 3d 20 24 73 63 72 69 70 74 3a 4e  null = $script:N
6180: 61 6d 65 53 70 61 63 65 53 74 61 63 6b 2e 50 6f  ameSpaceStack.Po
6190: 70 28 29 0d 0a 23 20 20 7d 0d 0a 7d 0d 0a 53 65  p()..#  }..}..Se
61a0: 74 2d 41 6c 69 61 73 20 78 65 20 4e 65 77 2d 58  t-Alias xe New-X
61b0: 45 6c 65 6d 65 6e 74 0d 0a 53 65 74 2d 41 6c 69  Element..Set-Ali
61c0: 61 73 20 4e 65 77 2d 58 6d 6c 45 6c 65 6d 65 6e  as New-XmlElemen
61d0: 74 20 4e 65 77 2d 58 45 6c 65 6d 65 6e 74 0d 0a  t New-XElement..
61e0: 0d 0a 66 75 6e 63 74 69 6f 6e 20 43 6f 6e 76 65  ..function Conve
61f0: 72 74 46 72 6f 6d 2d 58 6d 6c 44 73 6c 20 7b 0d  rtFrom-XmlDsl {.
6200: 0a 50 61 72 61 6d 28 5b 53 63 72 69 70 74 42 6c  .Param([ScriptBl
6210: 6f 63 6b 5d 24 73 63 72 69 70 74 29 0d 0a 20 20  ock]$script)..  
6220: 20 24 70 61 72 73 65 72 72 6f 72 73 20 3d 20 24   $parserrors = $
6230: 6e 75 6c 6c 0d 0a 20 20 20 24 67 6c 6f 62 61 6c  null..   $global
6240: 3a 74 6f 6b 65 6e 73 20 3d 20 5b 50 53 50 61 72  :tokens = [PSPar
6250: 73 65 72 5d 3a 3a 54 6f 6b 65 6e 69 7a 65 28 20  ser]::Tokenize( 
6260: 24 73 63 72 69 70 74 2c 20 5b 72 65 66 5d 24 70  $script, [ref]$p
6270: 61 72 73 65 72 72 6f 72 73 20 29 0d 0a 20 20 20  arserrors )..   
6280: 24 64 75 64 73 20 3d 20 24 67 6c 6f 62 61 6c 3a  $duds = $global:
6290: 74 6f 6b 65 6e 73 20 7c 20 57 68 65 72 65 2d 4f  tokens | Where-O
62a0: 62 6a 65 63 74 20 7b 20 24 5f 2e 54 79 70 65 20  bject { $_.Type 
62b0: 2d 65 71 20 22 43 6f 6d 6d 61 6e 64 22 20 2d 61  -eq "Command" -a
62c0: 6e 64 20 21 24 5f 2e 43 6f 6e 74 65 6e 74 2e 43  nd !$_.Content.C
62d0: 6f 6e 74 61 69 6e 73 28 27 2d 27 29 20 2d 61 6e  ontains('-') -an
62e0: 64 20 28 24 28 47 65 74 2d 43 6f 6d 6d 61 6e 64  d ($(Get-Command
62f0: 20 24 5f 2e 43 6f 6e 74 65 6e 74 20 2d 54 79 70   $_.Content -Typ
6300: 65 20 43 6d 64 6c 65 74 2c 46 75 6e 63 74 69 6f  e Cmdlet,Functio
6310: 6e 2c 45 78 74 65 72 6e 61 6c 53 63 72 69 70 74  n,ExternalScript
6320: 20 2d 45 41 20 30 29 20 2d 65 71 20 24 4e 75 6c   -EA 0) -eq $Nul
6330: 6c 29 20 7d 0d 0a 20 20 20 5b 41 72 72 61 79 5d  l) }..   [Array]
6340: 3a 3a 52 65 76 65 72 73 65 28 20 24 64 75 64 73  ::Reverse( $duds
6350: 20 29 0d 0a 20 20 20 0d 0a 20 20 20 5b 73 74 72   )..   ..   [str
6360: 69 6e 67 5b 5d 5d 24 53 63 72 69 70 74 54 65 78  ing[]]$ScriptTex
6370: 74 20 3d 20 22 24 73 63 72 69 70 74 22 20 2d 73  t = "$script" -s
6380: 70 6c 69 74 20 22 60 6e 22 0d 0a 0d 0a 20 20 20  plit "`n"....   
6390: 46 6f 72 45 61 63 68 28 24 74 6f 6b 65 6e 20 69  ForEach($token i
63a0: 6e 20 24 64 75 64 73 20 29 20 7b 0d 0a 20 20 20  n $duds ) {..   
63b0: 20 20 20 23 20 72 65 70 6c 61 63 65 20 3a 20 6e     # replace : n
63c0: 6f 74 61 74 69 6f 6e 20 77 69 74 68 20 6e 61 6d  otation with nam
63d0: 65 73 70 61 63 65 20 6e 6f 74 61 74 69 6f 6e 0d  espace notation.
63e0: 0a 20 20 20 20 20 20 69 66 28 20 24 74 6f 6b 65  .      if( $toke
63f0: 6e 2e 43 6f 6e 74 65 6e 74 2e 43 6f 6e 74 61 69  n.Content.Contai
6400: 6e 73 28 22 3a 22 29 20 29 20 7b 0d 0a 20 20 20  ns(":") ) {..   
6410: 20 20 20 20 20 20 24 6b 65 79 2c 20 24 6c 6f 63        $key, $loc
6420: 61 6c 6e 61 6d 65 20 3d 20 24 74 6f 6b 65 6e 2e  alname = $token.
6430: 43 6f 6e 74 65 6e 74 20 2d 73 70 6c 69 74 20 22  Content -split "
6440: 3a 22 0d 0a 20 20 20 20 20 20 20 20 20 24 53 63  :"..         $Sc
6450: 72 69 70 74 54 65 78 74 5b 28 24 74 6f 6b 65 6e  riptText[($token
6460: 2e 53 74 61 72 74 4c 69 6e 65 20 2d 20 31 29 5d  .StartLine - 1)]
6470: 20 3d 20 24 53 63 72 69 70 74 54 65 78 74 5b 28   = $ScriptText[(
6480: 24 74 6f 6b 65 6e 2e 53 74 61 72 74 4c 69 6e 65  $token.StartLine
6490: 20 2d 20 31 29 5d 2e 52 65 6d 6f 76 65 28 20 24   - 1)].Remove( $
64a0: 74 6f 6b 65 6e 2e 53 74 61 72 74 43 6f 6c 75 6d  token.StartColum
64b0: 6e 20 2d 31 2c 20 24 74 6f 6b 65 6e 2e 4c 65 6e  n -1, $token.Len
64c0: 67 74 68 20 29 2e 49 6e 73 65 72 74 28 20 24 74  gth ).Insert( $t
64d0: 6f 6b 65 6e 2e 53 74 61 72 74 43 6f 6c 75 6d 6e  oken.StartColumn
64e0: 20 2d 31 2c 20 22 27 22 20 2b 20 24 28 24 73 63   -1, "'" + $($sc
64f0: 72 69 70 74 3a 4e 61 6d 65 53 70 61 63 65 48 61  ript:NameSpaceHa
6500: 73 68 5b 24 6b 65 79 5d 20 2b 20 24 6c 6f 63 61  sh[$key] + $loca
6510: 6c 6e 61 6d 65 29 20 2b 20 22 27 22 20 29 0d 0a  lname) + "'" )..
6520: 20 20 20 20 20 20 7d 20 65 6c 73 65 20 7b 0d 0a        } else {..
6530: 20 20 20 20 20 20 20 20 20 24 53 63 72 69 70 74           $Script
6540: 54 65 78 74 5b 28 24 74 6f 6b 65 6e 2e 53 74 61  Text[($token.Sta
6550: 72 74 4c 69 6e 65 20 2d 20 31 29 5d 20 3d 20 24  rtLine - 1)] = $
6560: 53 63 72 69 70 74 54 65 78 74 5b 28 24 74 6f 6b  ScriptText[($tok
6570: 65 6e 2e 53 74 61 72 74 4c 69 6e 65 20 2d 20 31  en.StartLine - 1
6580: 29 5d 2e 52 65 6d 6f 76 65 28 20 24 74 6f 6b 65  )].Remove( $toke
6590: 6e 2e 53 74 61 72 74 43 6f 6c 75 6d 6e 20 2d 31  n.StartColumn -1
65a0: 2c 20 24 74 6f 6b 65 6e 2e 4c 65 6e 67 74 68 20  , $token.Length 
65b0: 29 2e 49 6e 73 65 72 74 28 20 24 74 6f 6b 65 6e  ).Insert( $token
65c0: 2e 53 74 61 72 74 43 6f 6c 75 6d 6e 20 2d 31 2c  .StartColumn -1,
65d0: 20 22 27 22 20 2b 20 24 28 24 73 63 72 69 70 74   "'" + $($script
65e0: 3a 4e 61 6d 65 53 70 61 63 65 48 61 73 68 5b 27  :NameSpaceHash['
65f0: 27 5d 20 2b 20 24 74 6f 6b 65 6e 2e 43 6f 6e 74  '] + $token.Cont
6600: 65 6e 74 29 20 2b 20 22 27 22 20 29 0d 0a 20 20  ent) + "'" )..  
6610: 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 23 20 69      }..      # i
6620: 6e 73 65 72 74 20 27 78 65 27 20 62 65 66 6f 72  nsert 'xe' befor
6630: 65 20 65 76 65 72 79 74 68 69 6e 67 20 28 75 6e  e everything (un
6640: 6c 65 73 73 20 69 74 27 73 20 61 20 76 61 6c 69  less it's a vali
6650: 64 20 63 6f 6d 6d 61 6e 64 29 0d 0a 20 20 20 20  d command)..    
6660: 20 20 24 53 63 72 69 70 74 54 65 78 74 5b 28 24    $ScriptText[($
6670: 74 6f 6b 65 6e 2e 53 74 61 72 74 4c 69 6e 65 20  token.StartLine 
6680: 2d 20 31 29 5d 20 3d 20 24 53 63 72 69 70 74 54  - 1)] = $ScriptT
6690: 65 78 74 5b 28 24 74 6f 6b 65 6e 2e 53 74 61 72  ext[($token.Star
66a0: 74 4c 69 6e 65 20 2d 20 31 29 5d 2e 49 6e 73 65  tLine - 1)].Inse
66b0: 72 74 28 20 24 74 6f 6b 65 6e 2e 53 74 61 72 74  rt( $token.Start
66c0: 43 6f 6c 75 6d 6e 20 2d 31 2c 20 22 78 65 20 22  Column -1, "xe "
66d0: 20 29 0d 0a 20 20 20 7d 0d 0a 20 20 20 57 72 69   )..   }..   Wri
66e0: 74 65 2d 4f 75 74 70 75 74 20 28 5b 53 63 72 69  te-Output ([Scri
66f0: 70 74 42 6c 6f 63 6b 5d 3a 3a 43 72 65 61 74 65  ptBlock]::Create
6700: 28 20 28 24 53 63 72 69 70 74 54 65 78 74 20 2d  ( ($ScriptText -
6710: 6a 6f 69 6e 20 22 60 6e 22 29 20 29 29 0d 0a 7d  join "`n") ))..}
6720: 0d 0a 20 20 20 0d 0a 45 78 70 6f 72 74 2d 4d 6f  ..   ..Export-Mo
6730: 64 75 6c 65 4d 65 6d 62 65 72 20 2d 61 6c 69 61  duleMember -alia
6740: 73 20 2a 20 2d 66 75 6e 63 74 69 6f 6e 20 4e 65  s * -function Ne
6750: 77 2d 58 44 6f 63 75 6d 65 6e 74 2c 20 4e 65 77  w-XDocument, New
6760: 2d 58 41 74 74 72 69 62 75 74 65 2c 20 4e 65 77  -XAttribute, New
6770: 2d 58 45 6c 65 6d 65 6e 74 2c 20 52 65 6d 6f 76  -XElement, Remov
6780: 65 2d 58 6d 6c 4e 61 6d 65 73 70 61 63 65 2c 20  e-XmlNamespace, 
6790: 43 6f 6e 76 65 72 74 2d 58 6d 6c 2c 20 53 65 6c  Convert-Xml, Sel
67a0: 65 63 74 2d 58 6d 6c 2c 20 46 6f 72 6d 61 74 2d  ect-Xml, Format-
67b0: 58 6d 6c 0d 0a                                   Xml..