PostgreSQL
 sql >> डेटाबेस >  >> RDS >> PostgreSQL

पोस्टग्रेज में xpath का उपयोग करके xml डेटा के कई स्तरों को निकालना

मैं इस सवाल की सराहना करता हूं कि यह सवाल कुछ साल पुराना है, लेकिन मैं यहां इसी तरह की समस्या के साथ आया हूं और मुझे विश्वास है कि मुझे इसका जवाब मिल गया है।

with x as (select
'<catalog catalog-id="manufacturer-catalog-id">
    <category-assignment category-id="category1" product-id="product1"/>
    <category-assignment category-id="category1" product-id="product2"/>
    <category-assignment category-id="category2" product-id="product3"/>
</catalog>'::xml as t
)
(
select 
       xpath('/catalog/@catalog-id', cat_node) catalog_id,
       xpath('/category-assignment/@category-id', cat_assn_list) category_id,
       xpath('/category-assignment/@product-id', cat_assn_list) product_id         
 from (select unnest(xpath('/catalog/category-assignment', t)) cat_assn_list, t cat_node from x) q
);

यह देता है

        catalog_id         | category_id | product_id
---------------------------+-------------+------------
 {manufacturer-catalog-id} | {category1} | {product1}
 {manufacturer-catalog-id} | {category1} | {product2}
 {manufacturer-catalog-id} | {category2} | {product3}
(3 rows)

यह मूल रूप से आधार चयन करता है जो दो कॉलम 1 देता है) एक xpath असाइनमेंट सूची (एकाधिक पंक्तियां) और 2) मूल श्रेणी नोड प्राप्त करने के लिए। लौटाई गई पंक्तियों को तब उच्च स्तरीय xpath कथनों द्वारा काम किया जाता है - पूर्ण श्रेणी नोड कॉलम से श्रेणी-आईडी और कॉलम स्तर xpaths असाइनमेंट सूची आइटम में।

मेरा मानना ​​​​है कि ओपी का मुद्दा यह था कि इसे पूरी तरह से एकल असाइनमेंट सूची कॉलम से चलाने का मतलब है कि, चूंकि पोस्टग्रेज़ एक ही डोम में पॉइंटर्स की बजाय उचित स्तर पर एक्सएमएल नोडसेट लौटा रहा है, इसके द्वारा लौटाया गया एक्सएमएल आउटपुट कैटलॉग स्तर से नीचे है और कि xml ndoeset को ऊपर की ओर ट्रैवर्स नहीं किया जा सकता है उदा। "पूर्वज ::" के साथ।

आशा है कि यह किसी और की मदद करता है।

संपादित करें - मैं इसके प्रदर्शन पर टिप्पणी नहीं कर सकता, क्योंकि मेरा मानना ​​है कि कैटलॉग-आईडी xpath समान कैटलॉग नोड के भीतर प्रत्येक असाइनमेंट पंक्ति के लिए दोहराया जाएगा।



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. SQLAlchemy:जांचें कि क्या दिया गया मान किसी सूची में है

  2. PostgreSQL डेटाबेस कैसे बनाएं

  3. सभी स्कीमा में PostgreSQL एक्सटेंशन स्थापित करना

  4. Django/PostgreSQL varchar से UUID

  5. क्वेरी की गति में सुधार कैसे करें?