PowerShell Cmdlets でXML データをCSV にエクスポート





XML Cmdlets

PowerShell Cmdlets は、XML へのリアルタイム連携機能を提供します。Cmdlets を使って、データに直接連携し、読み書き更新をDB と同感覚で行うことができます。

標準PowerShell cmdlets を使ってXML テーブルにアクセスして、CSV にエクスポート。

CData Cmdlets Module for XML は、直感的なXML データ連携を提供する標準cmdlet です。 本記事では、XML Cmdlets を使ったサンプルを提供します。

XML への接続を設定

See the Getting Started chapter in the data provider documentation to authenticate to your data source: The data provider models XML APIs as bidirectional database tables and XML files as read-only views (local files, files stored on popular cloud services, and FTP servers). The major authentication schemes are supported, including HTTP Basic, Digest, NTLM, OAuth, and FTP. See the Getting Started chapter in the data provider documentation for authentication guides.

After setting the URI and providing any authentication values, set DataModel to more closely match the data representation to the structure of your data.

The DataModel property is the controlling property over how your data is represented into tables and toggles the following basic configurations.

  • Document (default): Model a top-level, document view of your XML data. The data provider returns nested elements as aggregates of data.
  • FlattenedDocuments: Implicitly join nested documents and their parents into a single table.
  • Relational: Return individual, related tables from hierarchical data. The tables contain a primary key and a foreign key that links to the parent document.

See the Modeling XML Data chapter for more information on configuring the relational representation. You will also find the sample data used in the following examples. The data includes entries for people, the cars they own, and various maintenance services performed on those cars.

$conn = Connect-XML  -URI "$URI" -DataModel "$DataModel"

XML データを取得してCSV にパイプライン

次の手順で、people テーブルデータを取得して、結果をCSV ファイルにエクスポートします:

Select-XML -Connection $conn -Table people | Select -Property * -ExcludeProperty Connection,Table,Columns | Export-Csv -Path c:\mypeopleData.csv -NoTypeInformation

このように、Select-XML から取得した結果を、Select-Object cmdlet に流し、Export-Csv cmdlet に渡す前にいくつかのプロパティを除外しています。これは、CData Cmdlets が接続情報、テーブル、およびカラム情報が結果セットのそれぞれの"行"に挿入されるためです。それらの情報を表示したくない場合に、Export-Csv cmdlet に渡す前に除外を先に行い、それからCSV ファイルにエクスポートします。。

CData Cmdlets から、次のCmdlets にデータをパイプラインするところでは、接続、テーブル、カラムの情報が必要です。



Select-XML -Connection $conn -Table people -Where "[ personal.name.last ] = Roberts" | Remove-XML


CData Cmdlets は、データの加工やクレンジングを行うことができます。以下の手順では、CSV ファイルのデータを、挿入対象のオブジェクトに同じレコードが存在するかを確認した上で、存在する場合にはデータの更新、存在しない場合にはデータの挿入を行います。

Import-Csv -Path C:\MypeopleUpdates.csv | %{
  $record = Select-XML -Connection $XML -Table people -Where ("Id = `'"+$_.Id+"`'")
    Update-XML -Connection $xml -Table people -Columns ("[ personal.name.first ]","[ personal.name.last ]") -Values ($_.[ personal.name.first ], $_.[ personal.name.last ]) -Where ("Id = `'"+$_.Id+"`'")
    Add-XML -Connection $xml -Table people -Columns ("[ personal.name.first ]","[ personal.name.last ]") -Values ($_.[ personal.name.first ], $_.[ personal.name.last ])

このように、CData Cmdlets でデータ連携をシンプルに構成できます。Cmdlets では、モジュールのインストール、接続プロパティの設定だけで、データ連携の構築を始めることができます。是非、CData PowerShell Cmdlets の無償試用版をダウンロードして、シンプルかつパワフルなデータ連携を体感してください。