यह काम करता है:
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"}
ध्यान दें कि मैं नामस्थान उपनाम कैसे निर्दिष्ट करता हूं एन
<के तीसरे तर्क में आपके नाम स्थान के लिए कोड>एक्सपथ ()
और 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 से निपटने की आवश्यकता नहीं है।