[Powershell] Генерация xml-я через System.Xml.Linq

by Темных Сергей 07.03.2009 14:33:00

В powershell-е для генерации xml-я очень удобно использовать System.Xml.Linq. Но т.к. powershell использует .net 2.0, то System.Xml.Linq.dll придеться взять из .net 3.5.

Если предварительно запустить скрипт x-linq.ps1(указанный ниже), то можно будет выполнять следующие выражения:

(x-element "X" (x-attribute "p" 5) (x-attribute "p2" 6) (x-element "P" "-") (x-element "T" "1")).ToString()

что выведет

<X p="5" p2="5">
  <P>-</P>
  <T>1</T>
</X>

 

Другие примеры

-- examples.ps1 --
 (x-element "X" (x-attribute "p" 5) (x-attribute "p2" 6) (x-element "P" "-") (x-element "T" "1")).ToString()
#(x-element "X" (x-attribute "p" 5),(x-attribute "p2" 6),(x-element "P" "-"),(x-element "T" "1")).ToString()
$xs=(1,2,3,4 | foreach-object {(x-element "q" $_)})
$el=(x-element "P" "-")
(x-element "Data" $xs).ToString()
(x-element "Data" $el).ToString()
(x-element "Data" ([array]$el+$xs)).ToString()
(x-load ([System.IO.Path]::Combine($currentPath,"q.xml"))).ToString()
(x-load-text "<Data><Q>xxx</Q></Data>").ToString()
---- 

 

-- x-linq.ps1 --

$currentPath = split-path $myinvocation.mycommand.path
[void][System.Reflection.Assembly]::LoadFile([System.IO.Path]::Combine($currentPath,"System.Xml.Linq.dll"))


function x-element
{
 if ($args.length -eq 1)
 {
   return new-object System.Xml.Linq.XElement $name
 }
  $items=$args[1..($args.length-1)]
  if ($args[1] -is [array])
  {
    $items = $args[1]
  }
  [System.Xml.Linq.XName]$name=$args[0]

  #unwrap from psobject
  [array]$args2=@()
  for($i=0; $i -lt $items.length;$i++)
  {
    $item=$items[$i]
    if ($item -is [System.Xml.Linq.XElement])
    {
      [System.Xml.Linq.XElement]$el=$item
      $args2=$args2+$el
    }
    elseif ($item -is [System.Xml.Linq.XAttribute])
    {
      [System.Xml.Linq.XAttribute]$el=$item
      $args2=$args2+$el
    }
    else
    {
      $args2=$args2+$item
    }
  }


 return new-object System.Xml.Linq.XElement $name,$args2[0..($args2.length-1)]
}

function x-attribute
{
 Param([string]$name, $content)

 return new-object System.Xml.Linq.XAttribute $name,$content
}
function x-load
{
  Param([string]$filename)

  $fullpath = convert-path $filename
  [System.Xml.Linq.XElement]::Load($fullpath)
}
function x-load-text
{
  Param([string]$text)

  $x = new-object System.IO.StringReader $text
  [System.Xml.Linq.XElement]::Load($x)
}
----

Текущий рейтинг: 5.0 (1 голосов)

  • Currently 5/5 Stars.
  • 1
  • 2
  • 3
  • 4
  • 5

Tags:

Похожие записи

Powered by BlogEngine.NET 1.3.1.0
Theme by Mads Kristensen

Сергей Темных

Модулятор


Calendar

<<  Октябрь 2017  >>
повтсрчепясуво
2526272829301
2345678
9101112131415
16171819202122
23242526272829
303112345

View posts in large calendar

Страницы

    Последние комментарии

    Категории

    None


    Disclaimer

    The opinions expressed herein are my own personal opinions and do not represent my employer's view in anyway.

    © Copyright 2017

    Sign in