none
PowerShellで、XMLファイルの中から”必要なタグのみ抽出”したい。 RRS feed

  • 質問

  • 前提・実現したい事
    ---
    XMLファイルの中から、必要なタグのみ抽出したいです。

    ①XMLファイルをPowerShellで読み込み。

    ②必要なタグの抜き出し。

    ③抜き出したタグを、別名.XML で保存。

    【例】
    下記の様なXMLファイルがあったとします。

    <?xml version="1.0" encoding="utf-8"?>
    <EXP_HogehogeWorkDataTable>
    	<DocumentElement>
    
    	<EXP_HogehogeWork id="EXP_HogehogeWork1">
    		<RecordId>00000055643</RecordId>
    		<LastUpdateDate>2015-04-20T11:13:59.000+09:00</LastUpdateDate>
    	</EXP_HogehogeWork>
    
    	<EXP_HogehogeWork id="EXP_HogehogeWork2">
    		<RecordId>00000925544</RecordId>
    		<LastUpdateDate>2015-04-21T11:23:45.000+09:00</LastUpdateDate>
    	</EXP_HogehogeWork>
    
    	<EXP_HogehogeWork id="EXP_HogehogeWork3">
    		<RecordId>00000007048</RecordId>
    		<LastUpdateDate>2015-04-21T20:12:02.000+09:00</LastUpdateDate>
    	</EXP_HogehogeWork>
    
    	<EXP_HogehogeWork id="EXP_HogehogeWork4">
    		<RecordId>00001611089</RecordId>
    		<LastUpdateDate>2015-04-23T13:23:08.000+09:00</LastUpdateDate>
    	</EXP_HogehogeWork>
    
    	</DocumentElement>
    </EXP_HogehogeWorkDataTable>


    この中から、「 <RecordId> と <LastUpdateDate> 」のタグ部分のみ欲しいとして、
    抜き出しを行いたいのですが、上手く行きません。

    【理想の実行結果】

    <RecordId>00000055643</RecordId>
    <LastUpdateDate>2015-04-20T11:13:59.000+09:00</LastUpdateDate>
    <RecordId>00000925544</RecordId>
    <LastUpdateDate>2015-04-21T11:23:45.000+09:00</LastUpdateDate>
    <RecordId>00000007048</RecordId>
    <LastUpdateDate>2015-04-21T20:12:02.000+09:00</LastUpdateDate>
    <RecordId>00001611089</RecordId>
    <LastUpdateDate>2015-04-23T13:23:08.000+09:00</LastUpdateDate>


    【実際の実行結果】

    RecordId	     LastUpdateDate
    --------	     --------------
    00000055643 2015-04-20T11:13:59.000+09:00
    00000925544 2015-04-21T11:23:45.000+09:00
    00000007048 2015-04-21T20:12:02.000+09:00
    00001611089 2015-04-23T13:23:08.000+09:00


    タグ抜き出しに関して、参考にしたサイト


    発生している問題・Error Message
    ---
    上記サイトを参考に実行してみましたが、実際に取得出来た形式としては、SQLのテーブルの様な形で出力でした。
    指定したタグ1行丸々欲しいです。

    よろしくお願い致します。

    実際のソースコード
    ---



    試した事
    ---



    補足情報(言語/FW/ツール等のVersion)
    ---
    ・PowerShell ver5.0

    2017年6月21日 0:48

回答

  • タグの情報を含めて取得するには、XmlElementオブジェクトのOuterXmlプロパティを用いることで可能です。

    $xml.
        EXP_HogehogeWorkDataTable.
        DocumentElement.
        EXP_HogehogeWork|
        foreach {
            $_["RecordId"].OuterXml
            $_["LastUpdateDate"].OuterXml
        }

    Exp_HogehogeWork要素のInnerXmlプロパティを参照するともうちょっと簡略になりますが、RecordId要素とLastUpdateDate要素間に改行が入らないので、上記の手法を取ってみました。

    • 回答としてマーク mie.8 2017年6月21日 2:11
    2017年6月21日 1:35
    モデレータ

すべての返信

  • タグの情報を含めて取得するには、XmlElementオブジェクトのOuterXmlプロパティを用いることで可能です。

    $xml.
        EXP_HogehogeWorkDataTable.
        DocumentElement.
        EXP_HogehogeWork|
        foreach {
            $_["RecordId"].OuterXml
            $_["LastUpdateDate"].OuterXml
        }

    Exp_HogehogeWork要素のInnerXmlプロパティを参照するともうちょっと簡略になりますが、RecordId要素とLastUpdateDate要素間に改行が入らないので、上記の手法を取ってみました。

    • 回答としてマーク mie.8 2017年6月21日 2:11
    2017年6月21日 1:35
    モデレータ
  • その様な関数がある事を知りませんでした。

    無事、取得出来ました。

    ご回答ありがとうございます。


    2017年6月21日 2:11