プログラミング学習サイト

プログラミングの学習を開始される方を対象としたプログラミング入門サイトです。

PowershellでXMLファイルを読み書きする

Powershell概要

minegishirei.hatenablog.com

powershellxmlファイルを変数に格納する

サンプルコード1

$xml = [xml] (Get-Content powershell_blog.xml)
$xml

実行結果1

xml                      xml-stylesheet           rss
---                      --------------           ---
                                                  rss

サンプルコード2

$xml.rss

実行結果2

version : 2.0
dc      : http://purl.org/dc/elements/1.1/
slash   : http://purl.org/rss/1.0/modules/slash/
wfw     : http://wellformedweb.org/CommentAPI/
channel : channel

解説

powershellにはxmlを取り扱うための仕組みがすでに整っている。 そしてそのライブラリを取り扱うために新しくインストールする必要はなく、powershellの標準機能として搭載されている。

方法は簡単でxml文字列を[xml]として型宣言した変数に代入するだけ。 次のコードではGet-Contentによってファイル名を指定してxmlテキストを取得し、その内容を変数$xmlに代入している。

$xml = [xml] (Get-Content powershell_blog.xml)

xmlの各要素にpowershellでアクセスする。

サンプルコード

$xml = [xml] (Get-Content powershell_blog.xml)
($xml)[0]
  • 実行結果
guid: guid
title: "Windows PowerShell in Action" has been released
comment: http://blogs.msdn.com/powershell/rsscomments.aspx?PostID=171
link: http://blogs.msdn.com/powershell/archive/2007/02/19/windows-
pubDate: Mon, 19 Feb 2007 20:05:00 GMT
comments: {4, http://blogs.msdn.com/powershell/comments/1718281.aspx}
commentRss  : http://blogs.msdn.com/powershell/commentrss.aspx?PostID=1718281
creator     : PowerShellTeam

解説

xmlの各要素に対しては添字を使ってアクセスすることができる。

また、さらにその中の要素にタグを指定してアクセスしたい場合はドット繋ぎで指定してやればよい

サンプルコード

$xml = [xml] (Get-Content powershell_blog.xml)
($xml.rss.channel.item)[0].title

実行結果

"Windows PowerShell in Action" has been released

xmlからタグを指定して全て抜き出す。

パイプラインを用いてタグを全て抜き出すのがよい

サンプル

$xml | Sort-Object title | Select-Object title

実行結果

title
-----
"Windows PowerShell in Action" has been released
Controlling PowerShell Function (Re)Definition
Execution Policy and Vista
Executive Demo
It's All about Economics
NetCmdlets Beta 2 is now Available.
Payette Podcast

xmlファイルの要素の修正

## ファイル名を取得する
$filename = (Get-Item phone.xml).FullName

$phoneBook = [xml] (Get-Content $filename)

## 変更する対象を指定する。
$person = $phoneBook.AddressBook.Person[0]

## personのうち、電話番号とタイプをかえる
$person.Phone[0]."#text" = "555-1214"
$person.Phone[0].type = "mobile"

## さらに新しい携帯番号を追加
$newNumber = [xml] '<Phone type="home">555-1215</Phone>'
$newNode = $phoneBook.ImportNode($newNumber.Phone, $true)
[void] $person.AppendChild($newNode)

## ここで保存可能
$phoneBook.Save($filename)
Get-Content $filename

参考:海外版のpowershell pdfファイル

URL:http://index-of.co.uk/Microsoft-Windows-Ebooks/OReilly.Windows.PowerShell.Cookbook.Oct.2007.pdf

title:powershellによるxmlファイル作成 description:powershellxmlを扱う方法を紹介します。 category_script:page_name.startswith("1")

page:https://minegishirei.hatenablog.com/entry/2024/05/21/120240