PowerShellでXMLファイルを読み込むよ! | Get-Content
こんにちは!ブログを始めて5日目のきっしーです。
今日は、PowerShellでXMLファイルを読み込んでみます。
今回は、以下のXMLファイル(books.xml)を扱います。
<?xml version="1.0" encoding="utf-8"?>
<books>
<book isbn="0123456789">
<title>ぶろぐはじめました</title>
<author>kissy</author>
<date>2017-09-02</date>
</book>
<book isbn="abcdefghij">
<title>PowerShellはじめました</title>
<author>kissy</author>
<date>2017-09-03</date>
</book>
</books>
[xml] Get-ContentでXMLを読み込む
XMLファイルを読み込んで、オブジェクトとして変数に入れます。
このオブジェクトは「System.Xml.XmlDocument」になります。
$xmldoc = [xml](Get-Content "c:\temp\books.xml")
Create-Objectを使えば、以下のようにもかけます。
$xmldoc = Create-Object System.Xml.XmlDocument
$xmldoc.Load("c:\temp\books.xml")
特定の要素を取り出す
上記、$xmldocは「System.Xml.XmlDocument」なので、
XmlDocuementのメンバーやプロパティを使ってXMLを操作できます。
また、PowerShellでは"."(ピリオド)でXMLの要素を特定することもできます。
“.”(ピリオド)でXMLの要素を取り出す
“.”(ピリオド)でXMLの要素を取り出します。
以下の例では、books要素の下のbook要素を取り出しています。
例のXMLでは、book要素は2つあるので、$booksはbook要素オブジェクトの配列になります。
もちろん配列なので、foreachを使って処理できます。
$books = $xmldoc.books.book
foreach($item in $books)
{
# ... 何らかの処理
}
ほかにもより詳細にXMLの要素を探索する方法があります。
探索の方法は、また別な記事にまとめますね。
[xml]でXMLを読み込む
XMLはファイルからだけではなく、文字列からも読み込めます。
$xmldoc = [xml]"<books><book><title>文字列からXMLを読み込むよ</title></book></books>"
Create-Objectを使えば、以下のようにもかけます。
$xmldoc = Create-Object System.Xml.XmlDocument
$xmldoc.LoadXml("<books><book><title>文字列からXMLを読み込むよ</title></book></books>")
文字列からXMLを読み込むという手法、これはXMLを解析する場合ではなく、
主にXMLを作成したい場合などに用います。
作成したいXMLのテンプレートを文字列で用意し、要素や属性の値を変更する。
こうすることで、要素や属性の生成のコードを省略することができます。
関連記事
SPONSORED LINK
SPONSORED LINK