sql >> データベース >  >> RDS >> PostgreSQL

xpathを使用してpostgresのXML列からデータを抽出する

    これは機能します:

    WITH tbl(p_xml) AS (  -- CTE just to provide test table with xml value
       SELECT '<promotions xmlns="http://www.demandware.com/xml/impex/promotion/2008-01-31">
                  <campaign campaign-id="2013-1st-semester-jet-giveaways">
                     <description>2013 1st Semester Jet Giveaways</description>
                     <enabled-flag>true</enabled-flag>
                     <start-date>2013-01-01T05:00:00.000Z</start-date>
                     <end-date>2013-07-01T04:00:00.000Z</end-date>
                     <customer-groups>
                        <customer-group group-id="Everyone"/>
                     </customer-groups>
                  </campaign>
               </promotions>'::xml
        )  -- end of CTE, the rest is the solution
    SELECT xpath('/n:promotions/n:campaign/n:description/text()', p_xml
               , '{{n,http://www.demandware.com/xml/impex/promotion/2008-01-31}}')
    FROM   tbl;
    

    返品:

    {"2013 1st Semester Jet Giveaways"}
    

    名前空間エイリアスの割り当て方法に注意してください n <の3番目の引数の名前空間code> xpath() xpathのすべてのレベルで使用します。

    ドキュメントからXML名前空間を削除すると、すべてがはるかに簡単になります。

    WITH tbl(p_xml) AS (  -- not the missing namespace below
       SELECT '<promotions>
                  <campaign campaign-id="2013-1st-semester-jet-giveaways">
                     <description>2013 1st Semester Jet Giveaways</description>
                     <enabled-flag>true</enabled-flag>
                     <start-date>2013-01-01T05:00:00.000Z</start-date>
                     <end-date>2013-07-01T04:00:00.000Z</end-date>
                     <customer-groups>
                        <customer-group group-id="Everyone"/>
                     </customer-groups>
                  </campaign>
               </promotions>'::xml
       )
    SELECT xpath('/promotions/campaign/description/text()', p_xml)
    FROM   tbl;
    

    それは私だけですか、それとも json およびjsonb 、したがって、XMLを処理する必要はありません。




    1. php --laravel:データベースで重複する時間を処理する方法は?

    2. Laravelの移行/db:シードが非常に遅い

    3. SQL SELECTステートメントでパッケージ定数を使用するにはどうすればよいですか?

    4. アプリケーションによって発生したすべての「エラーメッセージ」を追跡、識別、および報告するための効果的な方法は何ですか?