🦾

[PowerShell]XMLファイルを整形(加工)するツール

2023/04/10に公開
1

概要

こちらの記事で文字だけを表示するスクリプトを使い、
PowerShellのはじめ方を紹介しましたが、より実践に近いサンプルコード(サンプルプログラム)を作成しました。

今回作成したPowerShellスクリプトはXMLファイルを読み込み、一部タグの属性の並べ替えや文字列置換など、
整形(加工・変換)するという内容です。

PowerShellの始め方(スタートアップ)としても、ご参考頂ければと思います。
https://haretokidoki-blog.com/pasocon_powershell-startup/

この記事のターゲット

  • PowerShellユーザーの方
  • PowerShellでXMLファイルを整形(加工)したい方
  • 初心者でPowerShellスクリプト作成の参考にしたい方

サンプルプログラムの紹介

サンプルプログラムのシナリオは、とあるシステムからアウトプットされた既定のXMLファイルを整形するという、シナリオを想定したツール。
なお、サンプルプログラムではXMLファイルを出力するシステムが2つある前提の作りとなっていて、各々の必須チェックの方法が異なっている。(詳細なチェック方法は後述)

サンプルプログラム

https://github.com/akiGAMEBOY/PowerShell_ShapingXMLfileTool

仕様

プログラム起動用:batファイルとプログラムの本体:ps1ファイル、個別の設定ファイル:setup.iniファイル、
の3つで構成されたプログラム。

なお、対象のXMLファイル名については、設定ファイルにより変更可能とする。

フローチャート

処理全体
プログラム本体

ファイル名:Main.ps1

画面仕様

バッチファイル(batファイル)を使いPowerShellスクリプトを実行する。
このPowerShellでは.NET Frameworkのフォーム(以下、dotNETフォームと称する)を呼び出して使用しており、
dotNETフォームを使ったポップアップウィンドウで操作する。
他にコマンドプロンプトが一時停止(PUASE)状態の確認画面の際に「Enterキー」を押し、処理続行させる操作方法も含まれる。
https://learn.microsoft.com/ja-jp/powershell/scripting/samples/creating-a-custom-input-box?view=powershell-7.3

機能仕様

  1. 初期設定

    • 設定ファイル読み込み
      • 対象XMLファイル名
  2. 対象XMLファイルの存在チェック
    設定ファイルより取得した対象のXMLファイル名がバッチの起動場所と同じ階層にあるかチェックする。
    ない場合は、処理中断。

  3. データ件数チェック
    XMLファイル内のデータをチェックする。
    空ファイルであれば、処理中断。

  4. タグと属性の必須チェック
    属性バージョンの存在チェックを確認して存在する場合は、バージョンにより下記内容の必須項目をチェック。
    存在しない場合は、処理中断。

    • v1.0用

      属性名 表記 必須 並び順
      システムバージョン SystemVersion="1.0" 1
      注文番号 PurchaseOrderNumber="XXXX" 2
      注文日 OrderDate="XXXX-XX-XX" 3
      備考 Ramarks="XXXX" 4
    • v2.0用

      属性名 表記 必須 並び順
      システムバージョン SystemVersion="2.0" 1
      注文番号 PurchaseOrderNumber="XXXX" 2
      注文日 OrderDate="XXXX-XX-XX" 3
      作成日 CreateDate="XXXX-XX-XX" × 4
      備考 Ramarks="XXXX" 5
  5. 置換前のコピーバックアップ
    対象XMLファイルを置換する前にコピーバックアップを取得。取得場所は対象XMLファイルと同じ場所。

  6. 属性の並べ替え
    バージョン情報を確認した後、バージョンにより下記内容で並べ替えを実行。

    • v1.0用

      属性名 表記 必須 並び順
      システムバージョン SystemVersion="1.0" 1
      注文番号 PurchaseOrderNumber="XXXX" 2
      注文日 OrderDate="XXXX-XX-XX" 3
      備考 Ramarks="XXXX" 4
    • v2.0用

      属性名 表記 必須 並び順
      システムバージョン SystemVersion="2.0" 1
      注文番号 PurchaseOrderNumber="XXXX" 2
      注文日 OrderDate="XXXX-XX-XX" 3
      作成日 CreateDate="XXXX-XX-XX" × 4
      備考 Ramarks="XXXX" 5
  7. 不要な一部属性の削除
    属性「備考(Remarks="XXXX")」を削除する。

  8. XMLファイルの置換処理
    上記、6の「属性の並べ替え」と7の「不要な一部属性の削除」の内容でXMLファイルを保存する。

入出力ファイル

入力ファイル
  • XMLファイル

https://github.com/akiGAMEBOY/PowerShell_ShapingXMLfileTool/blob/master/source/powershell/setup.ini#L7-L8

出力ファイル
  • XMLファイル

https://github.com/akiGAMEBOY/PowerShell_ShapingXMLfileTool/blob/master/source/powershell/setup.ini#L7-L8

  • XMLバックアップファイル
    整形前に対象XMLファイルをコピーする。コピー先は同じ階層にファイル名を変更[1]し出力する。

GitHub Repository

https://github.com/akiGAMEBOY/PowerShell_ShapingXMLfileTool

フォルダー構成

PowerShell_ShapingXMLfileTool
│  LICENSE.md
│  README.md
│  ShapingXMLfileTool.bat       ・・・起動用バッチファイル
│  PurchaseOrder.xml            ・・・対象XMLファイル(v1.0)
│
├─sample-data                   ・・・テスト用のXMLサンプルファイル
│      PurchaseOrderv1.0.xml
│      PurchaseOrderv2.0.xml
│
└─source
    ├─icon                      ・・・アイコンデータ
    │      shell32-296.ico
    │
    └─powershell
            Main.ps1            ・・・プログラム本体
            setup.ini           ・・・設定ファイル

参考記事

流用したサンプルプログラム

https://zenn.dev/haretokidoki/articles/d93f7608754bff

プログラム作成時に参考にした記事

関連記事

https://haretokidoki-blog.com/pasocon_powershell-startup/
https://zenn.dev/haretokidoki/articles/7e6924ff0cc960

脚注
  1. サンプルプログラムでは、「PurchaseOrder.xml_bkyyyyMMdd-HHmmss」です。yyyyMMdd-HHmmssは実行時の年月日時分秒が反映されます。 ↩︎

GitHubで編集を提案

Discussion