SHOEISHA iD

※旧SEメンバーシップ会員の方は、同じ登録情報(メールアドレス&パスワード)でログインいただけます

DeveloperZine(デベロッパージン)- エンジニアの意思決定を支える技術情報メディア ProductZine

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

Windows PowerShell 活用編

Windows PowerShell 活用編(10)
XPathNavigatorクラスの活用2

ダウンロード population.zip (484.0 B)

新しい要素の挿入

 ここでは新しい要素を挿入する方法について説明します。

 前準備として下記を実行し、XPathNavigatorの現在位置をpopulation_data/prefecture/nameにしておきます。

$xmlDoc = [xml](Get-Content population.xml -Encoding UTF8)
$Navi = [Xml.Xpath.XPathNavigator] $XmlDoc.CreateNavigator()
#population_dataへ移動
$Navi.MoveToFirstChild()
#prefectureへ移動
$Navi.MoveToFirstChild()
#name(値:青森県)へ移動
$Navi.MoveToFirstChild()

現在の要素の前に新しい要素を挿入する

 InsertBeforeメソッドを実行すると、現在の要素の前に新しい要素を挿入します。

$Navi.InsertBefore("<before>前にデータを挿入</before>")

 上記を実行すると、<name>要素の前に新しい要素が挿入され、XMLは下記のようになります。

<population_data>
    <prefecture district="東北">
        <before>前にデータを挿入</before>
        <name>青森県</name>
        <population>1392029</population>
    </prefecture>
<!-- 以下省略 -->

現在の要素の後ろに新しい要素を挿入する

 InsertAfterメソッドを実行すると現在の要素の後に新しい要素を挿入します。

$Navi.InsertAfter("<after>後ろにデータを挿入</after>")

 上記を実行すると、<name>要素の後ろに新しい要素が挿入され、XMLは下記のようになります。

<population_data>
    <prefecture district="東北">
        <before>前にデータを挿入</before>
        <name>青森県</name>
        <after>後ろにデータを挿入</after>
        <population>1392029</population>
    </prefecture>
<!-- 以下省略 -->

要素を削除する

 ここでは要素を削除する方法について説明します。

 要素を削除するには DeleteSelfメソッドを実行します。
DeleteSelfメソッドは、現在の要素とその子ノードを削除します。

 XPathNavigatorが 一番最初のprefecture要素を指し示しているときにこのメソッドを実行すると、青森県に関するprefectureデータが削除されます。

$Navi.DeleteSelf()
<population_data>
    <prefecture district="東北">
        <name>岩手県</name>
        <population>1349455</population>
<!-- 以下省略 --> 

変更結果をファイルに保存する

 変更した結果をファイルに保存する方法について説明します。

 これまでに変更した結果は変数$Naviに格納されています。XPathNavigatorの、メンバメソッドWriteSubtreeを使用して変更したXMLを保存することができます。

 ただし、WriteSubtreeメソッドはXPathNavigatorが現在指し示している要素から下のデータしか保存を行わないため、全体を保存するにはMoveToRootメソッドを実行する必要があります。

保存手順

  1. XMLセッティングの作成

    保存するXMLファイルのエンコーディングやインデントを指定します。

  2. XmlWriterの作成

    XmlWriterを利用して保存を行います。

  3. 現在位置をルートノードへ移動

    MoveToRootメソッドを使用してルートノードへ移動します。

  4. 変更結果を保存

    WriteSubTreeメソッドを使用して保存します。

  5. XmlWriterのクローズ

    使い終わったXmlWriterを閉じます。

 下記にコード例を示します。

# 1) XMLセッティングの作成
$settings = New-Object System.Xml.XmlWriterSettings
#インデントの指定
$settings.Indent = $True
#エンコーディングの指定
$settings.Encoding = [System.Text.Encoding]::UTF8
 
# 2) XmlWriterの作成
$xmlWriter = [System.Xml.XmlWriter]::Create("C:\Work\population2.xml", $settings)
# 3) 保存を行う前にルートノードへ移動
$Navi.MoveToRoot()
# 4) 保存
$Navi.WriteSubtree($xmlWriter)

# 5) XmlWriterのクローズ
$xmlWriter.Close()

まとめ

 今回は、XPathNavigatorを利用した

  • データの変更
  • XPathNavigatorの現在位置を操作する方法
  • 要素の挿入
  • 要素の削除
  • 変更したデータの保存

 について説明しました。

 ここまでの内容を理解できれば、PowerShellで自由にXMLを操作できることと思われます。ぜひ習得して日常業務に生かしていただければ幸いです。

この記事は参考になりましたか?

連載通知を行うには会員登録(無料)が必要です。
既に会員の方はを行ってください。
Windows PowerShell 活用編連載記事一覧

もっと読む

この記事の著者

HIRO(ヒロ)

HIRO's.NETのHIROです。とある半導体工場のSEです。VB.NET, C#, PowerShellによるプログラミングを楽しんでいます。最近はBlog でPowerShellについて書いています。2008/07/07にPowerShell from Japan!!というサイトを立ち上げまし...

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

この記事は参考になりましたか?

この記事をシェア

CodeZine(コードジン)
https://codezine.jp/article/detail/3851 2009/05/11 14:00

イベント

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

新規会員登録無料のご案内

  • ・全ての過去記事が閲覧できます
  • ・会員限定メルマガを受信できます

メールバックナンバー