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

Oracle XPath अभिव्यक्ति में मूल तत्व का नाम कैसे प्राप्त करें?

एक्सट्रेक्ट आपको ऊपर का रास्ता देखने देता है, लेकिन (जैसा कि एमओएस दस्तावेज़ 301709.1 में उल्लेख किया गया है; जो 9आई के लिए है लेकिन फिर भी दिखाई गई त्रुटि के अलावा मान्य लगता है):

तो आप name() . का उपयोग नहीं कर सकते , local-name() आदि कार्य, वर्तमान या मूल नोड पर। उस दस्तावेज़ में एक प्रकार का वर्कअराउंड है, जिसे उनके उदाहरण से थोड़ा सरल बनाया जा सकता है:

EXTRACT(xmltype(d.data), '//ns1:myId/..', 
  'xmlns:ns1="http://acme.com/').getRootElement() xml2

या थोड़े अलग रूप में:

xmltype(d.data).extract('//ns1:myId/..', 
  'xmlns:ns1="http://acme.com/').getRootElement()

दोनों के साथ डेमो:

with data (pid, name, data) as (
  select 42, 'Test', '<?xml version="1.0" encoding="ISO-8859-1"?>
  <ns1:root xmlns:ns1="http://acme.com/"><ns1:parent><ns1:myId>1234</ns1:myId></ns1:parent></ns1:root>' from dual
)
select d.pid, d.name
, EXTRACT(xmltype(d.data), '//ns1:myId', 'xmlns:ns1="http://acme.com/') xml
, EXTRACT(xmltype(d.data), '//ns1:myId/..', 'xmlns:ns1="http://acme.com/').getRootElement() xml2
, xmltype(d.data).extract('//ns1:myId/..', 'xmlns:ns1="http://acme.com/').getRootElement() xml3
from DATA d
order by d.pid desc
;

       PID NAME XML                            XML2       XML3     
---------- ---- ------------------------------ ---------- ----------
        42 Test <ns1:myId xmlns:ns1="http://ac parent     parent    
                me.com/">1234</ns1:myId>                      

लेकिन extract() वैसे भी बहिष्कृत है . आप इसे XMLTable के साथ कर सकते हैं। :

with data (pid, name, data) as (
  select 42, 'Test', '<?xml version="1.0" encoding="ISO-8859-1"?>
  <ns1:root xmlns:ns1="http://acme.com/"><parent><myId>1234</myId></parent></ns1:root>' from dual
)
select d.pid, d.name, x.*
from data d
cross join xmltable(xmlnamespaces('http://acme.com/' as "ns1"),
  '/ns1:*//myId'
  passing xmltype(d.data)
  columns myId number path '.',
    parent varchar2(20) path './../local-name()'
) x
order by d.pid desc;

       PID NAME       MYID PARENT             
---------- ---- ---------- --------------------
        42 Test       1234 parent              

यदि आपको कुछ और जटिल चाहिए तो आप नोड स्तरों से जो कुछ भी चाहते हैं उसे खींच सकते हैं, जैसा कि इस उत्तर में दिखाया गया है; लेकिन आपने जो कहा है, वह यहां अतिश्योक्तिपूर्ण है।




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Oracle दो अलग-अलग तिथियों की तुलना करता है

  2. सीआरएस 11.2.0

  3. OneToMany/अशक्त संबंध के साथ हाइबरनेट प्रदर्शन समस्या

  4. औसत भारित मूल्य खोजने की क्वेरी

  5. सॉफ्टवेयर कंपनियां जो नोएडा में Oracle D2k, PLSQL टेक्नोलॉजीज पर काम कर रही हैं