2013-08-06 5 views
5

मैं कुछ एक्सएमएल डाटा एक एसक्यूएल सर्वर तालिका में एक XML स्तंभ में इस प्रकार है:डिफ़ॉल्ट नाम स्थान के साथ एसक्यूएल सर्वर XQuery

<AffordabilityResults> 
     <matchlevel xmlns="urn:callcredit.co.uk/soap:affordabilityapi2">IndividualMatch</matchlevel> 
     <searchdate xmlns="urn:callcredit.co.uk/soap:affordabilityapi2">2013-07-29T11:20:53</searchdate> 
     <searchid xmlns="urn:callcredit.co.uk/soap:affordabilityapi2">{E40603B5-B59C-4A6A-92AB-98DE83DB46E7}</searchid> 
     <calculatedgrossannual xmlns="urn:callcredit.co.uk/soap:affordabilityapi2">13503</calculatedgrossannual> 
    <debtstress xmlns="urn:callcredit.co.uk/soap:affordabilityapi2"> 
    <incomedebtratio> 
     <totpaynetincome>0.02</totpaynetincome> 
     <totamtunsecured>0.53</totamtunsecured> 
     <totamtincsec>0.53</totamtincsec> 
    </incomedebtratio> 
    </debtstress> 
</AffordabilityResults> 

आप ध्यान दें जाएगा तत्वों में से कुछ एक xmlns विशेषता है कि और कुछ नहीं ...

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

मैं आसानी के साथ XMLNAMESPACES तत्व का उपयोग इस प्रकार डेटा को क्वेरी कर सकते हैं:

WITH XMLNAMESPACES (N'urn:callcredit.co.uk/soap:affordabilityapi2' as x) 
SELECT 

    ResponseXDoc.value('(/AffordabilityResults/x:matchlevel)[1]','varchar(max)') AS MatchLevel 
    , ResponseXDoc.value('(/AffordabilityResults/x:debtstress/x:incomedebtratio/x:totamtunsecured)[1]','nvarchar(max)') AS UnsecuredDebt 

    FROM [NewBusiness].[dbo].[t_TacResults] 

लेकिन एक्स जोड़ने: क्वेरी के लिए हिस्सा यह बेहद जटिल लग रही है, और मैं इसे व्यवसाय के लिए आसान रखना चाहते हैं विश्लेषक।

मैं जोड़ने की कोशिश की:

WITH XMLNAMESPACES (DEFAULT 'urn:callcredit.co.uk/soap:affordabilityapi2') 

और एक्स को हटाने: XQuery से - लेकिन इस अशक्त रिटर्न

है वहाँ किसी भी (संभवतः मूल तत्व पर xmlns की कमी की वजह?) जिस तरह से मैं इन प्रश्नों को डिफ़ॉल्ट नामस्थान के साथ या उसके बिना सरल बना सकता हूं?

+0

ठीक है, समस्या यह है कि '' नामस्थान में नहीं है, इसलिए जब आप 'urn: callcredit.co.uk ...' डिफ़ॉल्ट रूप से नामस्थान में तत्व पूछते हैं, तो आप इसे चुनने में असमर्थ हैं। दुर्भाग्य से नो-नेमस्पेस के लिए उपसर्ग निर्दिष्ट करने का कोई तरीका नहीं है, इसलिए मुझे लगता है कि आपको नामांकित तत्वों पर उपसर्ग का उपयोग करना होगा। – wst

उत्तर

15

यदि आपके उपयोग के मामले में नामस्थान महत्वपूर्ण नहीं हैं, तो आप नेमस्पेस वाइल्डकार्ड चयनकर्ता *: का उपयोग कर सकते हैं, जो दोनों मनमानी नामस्थानों के बिना और नोड्स का चयन कर सकते हैं।

एक उदाहरण क्वेरी हो सकता है

(/*:AffordabilityResults/*:matchlevel)[1] 

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

+0

यह मेरी समस्या का सबसे आसान समाधान साबित हुआ - धन्यवाद – reach4thelasers

+1

इसके लिए धन्यवाद, इससे मुझे एक समस्या हल करने में मदद मिली जहां मुझे नामस्थान – GenuineRex

+0

पर कोई परवाह नहीं है यह बहुत बढ़िया है! मैं डेटाबेस में काम करता हूं (किसी अन्य कंपनी द्वारा नियंत्रित) जहां मैं डेटा या स्कीमा नहीं बदल सकता और हमारे पास कुछ एक्सएमएल फ़ील्ड्स हैं जो पर्चे के लिए तीसरे पक्ष द्वारा पॉप्युलेट किए जाते हैं। यह अलग-अलग एक्सएमएल-नेमस्पेस के साथ एक गड़बड़ है। यह मेरे प्रश्नों को महत्वपूर्ण जानकारी निकालने की अनुमति देता है चाहे वे उस दिन का उपयोग करने वाले नामस्थान के बावजूद महसूस करते हैं। – MikeTeeVee

संबंधित मुद्दे