Google Maps Platform की वेब सेवाएं, Google के लिए एचटीटीपी इंटरफ़ेस का कलेक्शन हैं आपके मैप ऐप्लिकेशन के लिए भौगोलिक डेटा देने वाली सेवाएं.
इस गाइड में कुछ सामान्य तरीकों के बारे में बताया गया है. वेब सेवा अनुरोध और सेवा से जुड़े जवाबों को प्रोसेस किया जा सकता है. डेवलपर की गाइड देखें Places API के सभी दस्तावेज़ देखने के लिए.
वेब सेवा क्या है?
Google Maps Platform वेब सेवाएं एक ऐसा इंटरफ़ेस है जिससे Maps API के डेटा का अनुरोध किया जा सकता है बाहरी सेवाओं और आपके Maps ऐप्लिकेशन के डेटा के इस्तेमाल पर किया जा सकता है. ये सेवाएं हैं: के अनुसार उपयोग किए जाने के लिए डिज़ाइन किया गया है, लाइसेंस से जुड़ी पाबंदियां देखें.
Maps API की वेब सेवाएं, खास यूआरएल के लिए एचटीटीपी अनुरोधों का इस्तेमाल करती हैं, यूआरएल पैरामीटर पास करती हैं, और/या सेवाओं के लिए आर्ग्युमेंट के तौर पर, JSON फ़ॉर्मैट में पीओएसटी डेटा का इस्तेमाल किया जाना. आम तौर पर, ये सेवाएं पार्स करने के लिए JSON या XML के रूप में रिस्पॉन्स का मुख्य हिस्सा और/या आपके आवेदन के मुताबिक प्रोसेस किया जा रहा है.
सामान्य Places API अनुरोध, आम तौर पर नीचे दिया गया फ़ॉर्म:
https://places.googleapis.com/v1/places/PLACE_ID?parameters
नोट: सभी Places API ऐप्लिकेशन के लिए पुष्टि करना ज़रूरी होता है. पुष्टि करने के क्रेडेंशियल के बारे में ज़्यादा जानें.
एसएसएल/टीएलएस ऐक्सेस
एचटीटीपीएस, Google Maps Platform के उन सभी अनुरोधों के लिए ज़रूरी है जिनमें एपीआई पासकोड का इस्तेमाल किया जाता है या जिनमें उपयोगकर्ता शामिल होता है डेटा शामिल है. एचटीटीपी पर किए गए ऐसे अनुरोध जिनमें संवेदनशील जानकारी शामिल है, उन्हें अस्वीकार किया जा सकता है.
मान्य यूआरएल बनाना
आपको लग सकता है कि "मान्य" यूआरएल साफ़ तौर पर दिखता है, लेकिन
ऐसा नहीं है. पता बार में डाला गया कोई यूआरएल
ब्राउज़र में खास वर्ण (जैसे,
"上海+中國"
); ब्राउज़र को आंतरिक रूप से अनुवाद करने की ज़रूरत है.
ट्रांसमिशन से पहले उन वर्णों को कोड में बदलने के अलग-अलग तरीके का इस्तेमाल कर सकते हैं.
UTF-8 इनपुट को जनरेट या स्वीकार करने वाला कोई भी कोड, इसी टोकन से
UTF-8 वर्णों वाले यूआरएल को "मान्य" मान सकता है, लेकिन इसके लिए यह भी ज़रूरी है
वेब सर्वर पर भेजने से पहले उन वर्णों का अनुवाद करने के लिए.
इस प्रक्रिया को कहा जाता है
यूआरएल को कोड में बदलने की सुविधा या प्रतिशत में कोड में बदलने का तरीका.
विशेष वर्ण
हमें विशेष वर्णों का अनुवाद करना होगा, क्योंकि सभी यूआरएल को एक समान रिसॉर्स आइडेंटिफ़ायर (यूआरआई) की खास जानकारी. इस तरह से, इसका मतलब है कि यूआरएल इसमें ASCII वर्णों का केवल एक विशेष सबसेट होना चाहिए: परिचित अक्षर और अंक, और कंट्रोल के लिए इस्तेमाल किए जाने वाले कुछ रिज़र्व वर्ण यूआरएल में मौजूद वर्णों को शामिल न करें. इस टेबल में इन वर्णों की खास जानकारी होती है:
सेट करें | वर्ण | यूआरएल का इस्तेमाल |
---|---|---|
अक्षर और अंक | अ ख दू ना प रा ग ग ता है ए बी सी डी ई एफ़ जी एच आई जे के एल एम न ओ पी क्यू री एस टी यू डब्ल्यू डब्ल्यू एक्स वाई ज़ेड 0 1 2 3 4 5 6 7 8 9 | टेक्स्ट स्ट्रिंग, स्कीम का इस्तेमाल (http ), पोर्ट (8080 ) वगैरह |
गैर-आरक्षित | - _ . ~ | टेक्स्ट स्ट्रिंग |
बुकिंग की गई | ! * ' ( ) ; : @ & = + $ , / ? % # [ ] | वर्ण और/या टेक्स्ट स्ट्रिंग को कंट्रोल करें |
मान्य यूआरएल बनाते समय, आपको यह पक्का करना होगा कि इसमें सिर्फ़ वे वर्ण शामिल हों जो टेबल. वर्णों के इस सेट का इस्तेमाल करने के लिए यूआरएल बनाना इससे दो समस्याएं होती हैं, पहली गलती और पहली जगह:
- जिन वर्णों को आप हैंडल करना चाहते हैं, वे
ऊपर सेट किया गया है. उदाहरण के लिए, विदेशी भाषाओं के वर्ण
जैसे कि
上海+中國
को दिए गए वर्ण से बड़ा है. लोकप्रिय तौर पर, स्पेस (जो जिन्हें URL में दिखाने की अनुमति नहीं है) को अक्सर प्लस का उपयोग करके दिखाया जाता है'+'
वर्ण भी. - ऊपर दिए गए सेट में वर्ण, रिज़र्व किए गए वर्णों के तौर पर मौजूद हैं,
लेकिन इसका शाब्दिक इस्तेमाल करना ज़रूरी है.
उदाहरण के लिए, यूआरएल में
?
का इस्तेमाल यह बताने के लिए किया जाता है कि क्वेरी स्ट्रिंग की शुरुआत में; अगर आपको इसका इस्तेमाल करना है, स्ट्रिंग "? और द मिस्टीरियन्स," आपको उसे एन्कोड करना होगा'?'
वर्ण.
यूआरएल के कोड में बदलने के लिए इस्तेमाल किए गए सभी वर्ण कोड में बदले जाते हैं
'%'
वर्ण और दो वर्ण के हेक्स कोड का इस्तेमाल करके
वैल्यू, जो वर्ण UTF-8 से जुड़ी होनी चाहिए. उदाहरण के लिए,
UTF-8 में 上海+中國
को यूआरएल के तौर पर इस तरह एन्कोड किया जाएगा
%E4%B8%8A%E6%B5%B7%2B%E4%B8%AD%E5%9C%8B
. कॉन्टेंट बनाने
स्ट्रिंग ? and the Mysterians
को इस तरह यूआरएल कोड में बदला जाएगा
%3F+and+the+Mysterians
या %3F%20and%20the%20Mysterians
.
वे सामान्य वर्ण जिन्हें एन्कोडिंग की ज़रूरत होती है
कुछ सामान्य वर्ण जिन्हें कोड में बदलना ज़रूरी होता है, वे हैं:
असुरक्षित वर्ण | कोड में बदला गया मान |
---|---|
स्पेस | %20 |
" | %22 |
< | %3C |
> | %3E |
# | %23 |
% | %25 |
| | %7C |
उपयोगकर्ता के इनपुट से मिले यूआरएल को कभी-कभी बदलना पेचीदा. उदाहरण के लिए, कोई उपयोगकर्ता "5th&Main St." के रूप में पता दर्ज कर सकता है आम तौर पर, आपको यूआरएल को इसके अलग-अलग हिस्सों से बनाना चाहिए. लिटरल वर्णों के तौर पर किसी भी उपयोगकर्ता के इनपुट को शामिल करता है.
इसके अलावा, Google Maps Platform की सभी वेब सेवाओं के यूआरएल में ज़्यादा से ज़्यादा 16384 वर्ण हो सकते हैं और स्टैटिक वेब एपीआई का इस्तेमाल करें. ज़्यादातर सेवाओं के लिए, इस वर्ण सीमा तक शायद ही कभी पहुंचना होगा. हालांकि, ध्यान रखें कि कुछ सेवाओं के कई पैरामीटर होते हैं, जिनकी वजह से लंबे यूआरएल हो सकते हैं.
Google API का आसान इस्तेमाल
खराब तरीके से डिज़ाइन किए गए एपीआई क्लाइंट, इंटरनेट और Google के सर्वर पर. इस सेक्शन में, एपीआई के क्लाइंट के लिए कुछ सबसे सही तरीके बताए गए हैं. फ़ॉलो कर रहे हैं इन सबसे सही तरीकों की मदद से, ऐप्लिकेशन को ब्लॉक किए जाने से बचाया जा सकता है. इसकी वजह यह है कि को ट्रैक कर सकते हैं.
एक्स्पोनेंशियल बैकऑफ़
बहुत कम मामलों में, आपके अनुरोध को पूरा करने में कोई गड़बड़ी हो सकती है; तो आपको 4XX या 5XX या तो टीसीपी कनेक्शन आपके क्लाइंट और Google के सर्वर. अक्सर अनुरोध को इस तरह से करना अच्छा रहता है कि पहला अनुरोध पूरा न होने पर, फ़ॉलोअप अनुरोध पूरा हो सकता है. हालांकि, यह ज़रूरी है कि इस प्रोसेस के दौरान, Google के सर्वर से बार-बार अनुरोध करने के लिए लूप में जाते हैं. लूप में चलने वाले इस तरीके की वजह से आपके क्लाइंट और Google के बीच के नेटवर्क की वजह से, कई पक्षों को समस्या हो रही है.
एक बेहतर तरीका यह है कि दो कोशिशों के बीच में देरी होने पर, फिर से कोशिश करें. आम तौर पर हर कोशिश में एक से ज़्यादा कारक की मदद से देरी होती है. इसे इस तरीके से जाना जाता है: एक्सपोनेन्शियल बैकऑफ़.
उदाहरण के लिए, वह ऐप्लिकेशन देखें जो टाइम ज़ोन एपीआई:
https://maps.googleapis.com/maps/api/timezone/json?location=39.6034810,-119.6822510×tamp=1331161200&key=YOUR_API_KEY
Python के इस उदाहरण में, एक्स्पोनेंशियल बैकऑफ़ के साथ अनुरोध करने का तरीका बताया गया है:
import json import time import urllib.error import urllib.parse import urllib.request # The maps_key defined below isn't a valid Google Maps API key. # You need to get your own API key. # See https://developers.google.com/maps/documentation/timezone/get-api-key API_KEY = "YOUR_KEY_HERE" TIMEZONE_BASE_URL = "https://maps.googleapis.com/maps/api/timezone/json" def timezone(lat, lng, timestamp): # Join the parts of the URL together into one string. params = urllib.parse.urlencode( {"location": f"{lat},{lng}", "timestamp": timestamp, "key": API_KEY,} ) url = f"{TIMEZONE_BASE_URL}?{params}" current_delay = 0.1 # Set the initial retry delay to 100ms. max_delay = 5 # Set the maximum retry delay to 5 seconds. while True: try: # Get the API response. response = urllib.request.urlopen(url) except urllib.error.URLError: pass # Fall through to the retry loop. else: # If we didn't get an IOError then parse the result. result = json.load(response) if result["status"] == "OK": return result["timeZoneId"] elif result["status"] != "UNKNOWN_ERROR": # Many API errors cannot be fixed by a retry, e.g. INVALID_REQUEST or # ZERO_RESULTS. There is no point retrying these requests. raise Exception(result["error_message"]) if current_delay > max_delay: raise Exception("Too many retry attempts.") print("Waiting", current_delay, "seconds before retrying.") time.sleep(current_delay) current_delay *= 2 # Increase the delay each time we retry. if __name__ == "__main__": tz = timezone(39.6034810, -119.6822510, 1331161200) print(f"Timezone: {tz}")
आपको इस बात का भी ध्यान रखना चाहिए कि ऐप्लिकेशन कॉल में कोड को फिर से लोड करने की कोशिश न की जाए ऐसी चेन जो एक के बाद एक कई अनुरोधों पर ले जाती है.
सिंक किए गए अनुरोध
Google के एपीआई पर सिंक किए गए अनुरोधों की बड़ी संख्या, किसी डिस्ट्रिब्यूटेड अनुरोध की तरह दिख सकती है सेवा में रुकावट (डीडीओएस) का हमला, Google के इन्फ़्रास्ट्रक्चर पर हमला करता है और इसे अपने हिसाब से मैनेज किया जाना चाहिए. यहां की यात्रा पर हूं इससे बचने के लिए, आपको यह पक्का करना चाहिए कि एपीआई अनुरोध सिंक नहीं किए गए हैं के बीच फ़र्क़ कर सकते हैं.
उदाहरण के लिए, ऐसे ऐप्लिकेशन पर विचार करें जो मौजूदा टाइम ज़ोन का समय दिखाता है. यह ऐप्लिकेशन, क्लाइंट के ऑपरेटिंग सिस्टम में ऐसा अलार्म सेट करेगा जो उसे चालू करेगा मिनट की शुरुआत में बदलाव करने के लिए कहें, ताकि दिखाए गए समय को अपडेट किया जा सके. ऐप्लिकेशन को यह करना चाहिए उस अलार्म से जुड़ी प्रोसेसिंग के तहत कोई एपीआई कॉल नहीं किया जा सकता.
किसी तय अलार्म के जवाब में एपीआई कॉल करना अच्छा नहीं है, क्योंकि इससे एपीआई कॉल समय के साथ सिंक होता है, न कि इन्हें समय के साथ बराबर शेयर किया जाएगा. ऐसा करने से खराब तरीके से डिज़ाइन किया गया कोई ऐप्लिकेशन, हर मिनट के शुरू में साठ गुना सामान्य स्तर पर ट्रैफ़िक.
इसके बजाय, एक दूसरा अलार्म यह भी हो सकता है कि वह बिना किसी तय क्रम के चुने गए समय पर सेट हो. जब यह दूसरा अलार्म सक्रिय करता है तो ऐप्लिकेशन किसी भी ऐसे एपीआई को कॉल करता है जिसकी उसे ज़रूरत होती है और नतीजे. जब ऐप्लिकेशन मिनट की शुरुआत में ही अपने डिसप्ले को अपडेट करना चाहता है, तब वह एपीआई को फिर से कॉल करने के बजाय, पहले से सेव किए गए नतीजों को देखें. इस तरीके से, एपीआई कॉल ये समय के साथ एक समान रहती हैं. इसके अलावा, एपीआई कॉल की वजह से डिसप्ले में रेंडर होने में देरी नहीं होती अपडेट किया जा रहा है.
मिनट की शुरुआत के अलावा, सिंक करने के अन्य सामान्य समय, आपको सावधान रहना चाहिए टारगेट करने के लिए नहीं का समय घंटे की शुरुआत में होता है और हर दिन की आधी रात को शुरू होता है.
जवाब प्रोसेस किए जा रहे हैं
इस सेक्शन में बताया गया है कि वेब सेवा से मिले जवाबों से, इन वैल्यू को डाइनैमिक तौर पर कैसे एक्सट्रैक्ट किया जा सकता है.
Google Maps की वेब सेवाएं ऐसे जवाब देती हैं जिन्हें भरना आसान होता है समझने में आसान है, लेकिन लोगों के लिए आसान नहीं है. क्वेरी करते समय, का इस्तेमाल करते हैं, तो हो सकता है कि आप कुछ सटीक वैल्यू. आम तौर पर, आपको वेब से मिले जवाबों को पार्स करना होगा और केवल उन मानों को एक्सट्रैक्ट करें जिनमें आपकी रुचि है.
पार्स करने की आपकी स्कीम, इस बात पर निर्भर करती है कि क्या आप लौट रहे हैं आउटपुट को XML या JSON में एक्सपोर्ट करना चाहिए. JSON रिस्पॉन्स, जो पहले से इस फ़ॉर्मैट में हो सकते हैं JavaScript ऑब्जेक्ट, JavaScript में ही प्रोसेस किए जा सकते हैं क्लाइंट-साइड पर. एक्सएमएल रिस्पॉन्स को एक्सएमएल प्रोसेसर का इस्तेमाल करके प्रोसेस किया जाना चाहिए और एक्सएमएल फ़ॉर्मैट में मौजूद एलिमेंट का पता लगाने के लिए, एक्सएमएल क्वेरी लैंग्वेज का इस्तेमाल करें. हम XPath का इस्तेमाल इन कामों के लिए करते हैं: नीचे दिए गए उदाहरण देखें, क्योंकि आम तौर पर इसका इस्तेमाल एक्सएमएल प्रोसेसिंग में किया जा सकता है लाइब्रेरी.
KML के साथ एक्सएमएल प्रोसेस करना
एक्सएमएल ज़्यादा जानकारी देने वाला स्ट्रक्चर्ड जानकारी फ़ॉर्मैट है, जो इसके लिए इस्तेमाल किया जाता है
डेटा इंटरचेंज. हालांकि, यह JSON जितना लाइटवेट नहीं है, लेकिन एक्सएमएल
और बेहतर टूल उपलब्ध कराता है. इसके लिए कोड
उदाहरण के लिए, Java में एक्सएमएल की प्रोसेसिंग को
javax.xml
पैकेज.
एक्सएमएल रिस्पॉन्स को प्रोसेस करते समय, आपको किसी उचित इसके बजाय, एक्सएमएल दस्तावेज़ में नोड चुनने के लिए क्वेरी भाषा का इस्तेमाल किया जाता है यह मानकर कि एलिमेंट, एक्सएमएल मार्कअप. XPath नोड और एलिमेंट के बारे में खास तौर पर जानकारी देने के लिए एक लैंग्वेज सिंटैक्स है एक्सएमएल दस्तावेज़ में. आपको यह जानकारी देने की सुविधा मिलती है कि आपने एक्सएमएल रिस्पॉन्स दस्तावेज़ में खास कॉन्टेंट मौजूद हो.
{7/} एक्सप्रेशन
X पाथ के बारे में थोड़ी-बहुत जानकारी रखने से, GA4 को डेवलप करने में मदद मिलती है एक शानदार पार्सिंग स्कीम. इस सेक्शन में बताया जाएगा कि एलिमेंट के लिए बनाई गई है, जो आपको एक्सएमएल दस्तावेज़ कई एलिमेंट पर ध्यान दिया जा सकता है और मुश्किल क्वेरी बनाई जा सकती हैं.
[व्यक्ति का नाम] किसी एक्सएमएल में मौजूद एलिमेंट को चुनने के लिए, एक्सप्रेशन का इस्तेमाल करता है दस्तावेज़ में एक ही सिंटैक्स का इस्तेमाल किया जा सकता है. ये एक्सप्रेशन, एक्सएमएल दस्तावेज़ में मौजूद एलिमेंट की पहचान करते हैं ट्री जो एक हैरारकी ट्री है, जो डीओएम से मिलता-जुलता है. आम तौर पर, एक्स पाथ एक्सप्रेशन लालची होते हैं, जो दिखाते हैं कि वे दिए गए मापदंड से मेल खाने वाले सभी नोड से मेल खाएगा.
हम नीचे दी गई ऐब्सट्रैक्ट एक्सएमएल का इस्तेमाल करके, उदाहरण:
<WebServiceResponse> <status>OK</status> <result> <type>sample</type> <name>Sample XML</name> <location> <lat>37.4217550</lat> <lng>-122.0846330</lng> </location> </result> <result> <message>The secret message</message> </result> </WebServiceResponse>
एक्सप्रेशन में नोड चुनना
एसएएमएल को चुनने पर नोड चुने जाते हैं. रूट नोड
इसमें पूरा दस्तावेज़ शामिल होता है. इस नोड को चुनने के लिए आप इसका इस्तेमाल करें
विशेष एक्सप्रेशन "/
". ध्यान दें कि रूट
नोड आपके एक्सएमएल दस्तावेज़ का टॉप-लेवल नोड नहीं है; असल में,
यह इस टॉप-लेवल एलिमेंट से एक लेवल ऊपर रहता है और इसमें शामिल होता है
इसे.
एलिमेंट नोड, एक्सएमएल में मौजूद अलग-अलग एलिमेंट को दिखाते हैं
दस्तावेज़ ट्री. एक <WebServiceResponse>
एलिमेंट,
उदाहरण के लिए, यह
ऊपर दी गई सेवा का सैंपल देखें. आप या तो इसके ज़रिए अलग-अलग नोड चुनते हैं
ऐब्सलूट या रिलेटिव पाथ, जो मौजूदगी के हिसाब से या
लीडिंग "/
" का मौजूद न होना वर्ण.
- ऐब्सलूट पाथ: "
/WebServiceResponse/result
" एक्सप्रेशन उन सभी<result>
नोड को चुनता है<WebServiceResponse>
के बच्चे हैं नोड के लिए अलग-अलग हैं. (ध्यान दें कि ये दोनों एलीमेंट मूल से नीचे आते हैं नोड "/
" पर लागू होता है.) - मौजूदा कॉन्टेक्स्ट में रिलेटिव पाथ: एक्सप्रेशन
"
result
" किसी<result>
से मेल खाएगा मौजूदा संदर्भ में शामिल एलिमेंट शामिल होने चाहिए. आम तौर पर, आपको नहीं करना चाहिए संदर्भ की चिंता करनी पड़ती है, क्योंकि आम तौर पर वेब को प्रोसेस किया जाता है सेवा के नतीजे पाने के लिए एक ही व्यंजक का इस्तेमाल किया जाता है.
इन एक्सप्रेशन में से किसी को भी बेहतर बनाया जा सकता है
वाइल्डकार्ड पाथ का, डबल-स्लैश ("//
") से दिखाया गया है.
यह वाइल्डकार्ड संकेत देता है कि शून्य या ज़्यादा तत्व
बीच का पाथ. OAuth एक्सप्रेशन "//formatted_address
,"
उदाहरण के लिए, मौजूदा दस्तावेज़ में उस नाम के सभी नोड से मेल खाएगा.
//viewport//lat
एक्सप्रेशन सभी से मेल खाएगा
<lat>
एलिमेंट, जो <viewport>
का ट्रेस कर सकते हैं
एक अभिभावक के रूप में.
डिफ़ॉल्ट रूप से, एक्स पाथ एक्सप्रेशन सभी एलिमेंट से मेल खाते हैं. पाबंदी लगाई जा सकती है
किसी एलिमेंट से मैच करने के लिए, एक्सप्रेशन के तौर पर predउदाहरण दें,
जो स्क्वेयर ब्रैकेट ([]
) में बंद है. एक्स पाथ
"/GeocodeResponse/result[2]
एक्सप्रेशन हमेशा
दूसरा नतीजा मिलता है, उदाहरण के लिए.
एक्सप्रेशन का टाइप | |
---|---|
रूट नोड | XPath एक्सप्रेशन: "
/ "चुनाव:
<WebServiceResponse> <status>OK</status> <result> <type>sample</type> <name>Sample XML</name> <location> <lat>37.4217550</lat> <lng>-122.0846330</lng> </location> </result> <result> <message>The secret message</message> </result> </WebServiceResponse> |
ऐब्सलूट पाथ | XPath एक्सप्रेशन: "
/WebServiceResponse/result "चुनाव:
<result> <type>sample</type> <name>Sample XML</name> <location> <lat>37.4217550</lat> <lng>-122.0846330</lng> </location> </result> <result> <message>The secret message</message> </result> |
वाइल्डकार्ड के साथ पाथ | XPath एक्सप्रेशन: "
/WebServiceResponse//location "चुनाव:
<location> <lat>37.4217550</lat> <lng>-122.0846330</lng> </location> |
प्रेडिकेट वाला पाथ | XPath एक्सप्रेशन: "
/WebServiceResponse/result[2]/message "चुनाव:
<message>The secret message</message> |
पहले result के सभी डायरेक्ट चाइल्ड |
XPath एक्सप्रेशन: "
/WebServiceResponse/result[1]/* "चुनाव:
<type>sample</type> <name>Sample XML</name> <location> <lat>37.4217550</lat> <lng>-122.0846330</lng> </location> |
इसका name
result जिसका type टेक्स्ट "सैंपल" है. |
XPath एक्सप्रेशन: "
/WebServiceResponse/result[type/text()='sample']/name "चुनाव:
Sample XML |
यह ध्यान रखना ज़रूरी है कि एलिमेंट चुनते समय, नोड चुने जाते हैं, टेक्स्ट के साथ-साथ अन्य आम तौर पर, सभी मेल खाने वाले नोड पर दोहराना और टेक्स्ट एक्सट्रैक्ट करना चाहेंगे. आपने लोगों तक पहुंचाया मुफ़्त में सीधे टेक्स्ट नोड से भी मेल खा सकता है; टेक्स्ट नोड देखें नीचे दिया गया है.
ध्यान दें कि OAuth में एट्रिब्यूट नोड भी इस्तेमाल किए जा सकते हैं; हालांकि, Google Maps की सभी वेब सेवाएं एट्रिब्यूट के बिना एलिमेंट उपलब्ध कराती हैं. इसलिए, विशेषताओं का मिलान आवश्यक नहीं है.
एक्सप्रेशन में टेक्स्ट चुनना
एक्सएमएल दस्तावेज़ में मौजूद टेक्स्ट की जानकारी देने के लिए,एक्स पाथ एक्सप्रेशन का इस्तेमाल किया गया है
किसी टेक्स्ट नोड ऑपरेटर के माध्यम से. यह ऑपरेटर "text()
"
बताए गए नोड से टेक्स्ट निकालने के बारे में बताता है. उदाहरण के लिए,
OAuth एक्सप्रेशन "//formatted_address/text()
" वसीयत
<formatted_address>
के अंदर का सारा टेक्स्ट दिखाएं
एलिमेंट.
एक्सप्रेशन का टाइप | |
---|---|
सभी टेक्स्ट नोड (खाली सफ़ेद जगह के साथ) | XPath एक्सप्रेशन: "
//text() "चुनाव:
sample Sample XML 37.4217550 -122.0846330 The secret message |
लेख चयन | XPath एक्सप्रेशन: "
/WebServiceRequest/result[2]/message/text() "चुनाव:
The secret message |
कॉन्टेक्स्ट के हिसाब से चुना गया | XPath एक्सप्रेशन: "
/WebServiceRequest/result[type/text() = 'sample']/name/text() "चुनाव:
Sample XML |
वैकल्पिक रूप से, आप किसी एक्सप्रेशन का आकलन करके कोई सेट वापस दे सकते हैं और फिर उस "नोड सेट" पर दोहराते हैं एक्सट्रैक्ट करना टेक्स्ट को कॉपी कर पाएगा. हमने नीचे दिए गए उदाहरण में, इस तरीके का इस्तेमाल किया है.
एक्स पाथ के बारे में ज़्यादा जानकारी के लिए, यहां देखें XPath W3C स्पेसिफ़िकेशन.
Java में XPath का आकलन करना
Java की मदद से, एक्सएमएल पार्स करने और एक्स पाथ एक्सप्रेशन का इस्तेमाल किया जा सकता है
javax.xml.xpath.*
पैकेज में शामिल हैं.
इसी वजह से, इस सेक्शन में मौजूद सैंपल कोड,
बताएं कि एक्सएमएल को कैसे मैनेज करना है और एक्सएमएल सेवा के रिस्पॉन्स से डेटा कैसे पार्स करना है.
अपने Java कोड मेंX फ़ाइल का इस्तेमाल करने के लिए, आपको सबसे पहले इंस्टैंशिएट करना होगा
XPathFactory
और कॉल का एक इंस्टेंस
XPath
ऑब्जेक्ट बनाने के लिए, उस फ़ैक्ट्री की डिवाइस पर newXPath()
. इसके बाद यह ऑब्जेक्ट, पास की गई एक्सएमएल को प्रोसेस कर सकता है
और एक्स पाथ एक्सप्रेशन का इस्तेमाल करके, evaluate()
तरीके का इस्तेमाल करता है.
एक्स पाथ एक्सप्रेशन का आकलन करते समय, पक्का करें कि आपने बार-बार
किसी भी संभावित "नोड सेट" पर जिन्हें लौटाया जा सकता है. क्योंकि ये
परिणाम, Java कोड में DOM नोड के रूप में दिखाए जाते हैं, आपको
किसी NodeList
ऑब्जेक्ट में ऐसी कई वैल्यू हों और
उन ऑब्जेक्ट में से कोई टेक्स्ट या वैल्यू एक्सट्रैक्ट करने के लिए, उस ऑब्जेक्ट पर दोहराना
नोड.
यह कोड बताता है कि XPath
कैसे बनाया जाता है
ऑब्जेक्ट को कस्टमाइज़ करने के बारे में जानने के लिए, उसे एक्सएमएल और एक OAuth एक्सप्रेशन असाइन करें
एक्सप्रेशन का इस्तेमाल करके काम का कॉन्टेंट प्रिंट किया जा सकता है.
import org.xml.sax.InputSource; import org.w3c.dom.*; import javax.xml.xpath.*; import java.io.*; public class SimpleParser { public static void main(String[] args) throws IOException { XPathFactory factory = XPathFactory.newInstance(); XPath xpath = factory.newXPath(); try { System.out.print("Web Service Parser 1.0\n"); // In practice, you'd retrieve your XML via an HTTP request. // Here we simply access an existing file. File xmlFile = new File("XML_FILE"); // The xpath evaluator requires the XML be in the format of an InputSource InputSource inputXml = new InputSource(new FileInputStream(xmlFile)); // Because the evaluator may return multiple entries, we specify that the expression // return a NODESET and place the result in a NodeList. NodeList nodes = (NodeList) xpath.evaluate("XPATH_EXPRESSION", inputXml, XPathConstants.NODESET); // We can then iterate over the NodeList and extract the content via getTextContent(). // NOTE: this will only return text for element nodes at the returned context. for (int i = 0, n = nodes.getLength(); i < n; i++) { String nodeString = nodes.item(i).getTextContent(); System.out.print(nodeString); System.out.print("\n"); } } catch (XPathExpressionException ex) { System.out.print("XPath Error"); } catch (FileNotFoundException ex) { System.out.print("File Error"); } } }