PostgreSQL
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> PostgreSQL

Sử dụng xpath để trích xuất dữ liệu từ một cột XML trong postgres

Điều này hoạt động:

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;

Lợi nhuận:

{"2013 1st Semester Jet Giveaways"}

Lưu ý cách tôi chỉ định bí danh không gian tên n cho không gian tên của bạn trong đối số thứ ba của xpath () và sử dụng nó ở mọi cấp độ của xpath.

Nếu bạn xóa không gian tên XML khỏi tài liệu, mọi thứ sẽ trở nên đơn giản hơn nhiều:

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;

Chỉ tôi hay mọi người hài lòng về json và jsonb , vì vậy chúng tôi không phải xử lý XML.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Tạo bản sao của hàm C nội bộ PostgreSQL và tải nó dưới dạng hàm do người dùng xác định

  2. Làm thế nào để trích xuất giá trị trung bình?

  3. Liên đoàn động TẤT CẢ truy vấn trong Postgres

  4. Làm thế nào để giữ cho dữ liệu không sắp xếp?

  5. Cách tạo Postgresql Dump từ vùng chứa Docker?