रूटीन एपीआई की मदद से अगली पीढ़ी के निर्देश पाने की सुविधा आज़माएं. यह अब झलक के पेज पर उपलब्ध है.

निर्देश एपीआई वेब सेवाओं का इस्तेमाल करने के सबसे सही तरीके

संग्रह की मदद से व्यवस्थित रहें अपनी प्राथमिकताओं के आधार पर, कॉन्टेंट को सेव करें और कैटगरी में बांटें.

Google Maps Platform की वेब सेवाएं, Google की उन सेवाओं के लिए एचटीटीपी इंटरफ़ेस का संग्रह हैं जो आपके मैप ऐप्लिकेशन का भौगोलिक डेटा उपलब्ध कराती हैं.

यह गाइड, वेब सेवा सेट अप करने और सेवा के जवाबों को प्रोसेस करने के सबसे सही तरीकों के बारे में बताती है. निर्देश से जुड़े एपीआई के पूरे दस्तावेज़ के लिए, डेवलपर की गाइड देखें.

वेब सेवा क्या है?

Google Maps Platform की वेब सेवाएं, बाहरी सेवाओं से Maps API डेटा का अनुरोध करने और आपके Maps ऐप्लिकेशन के डेटा का इस्तेमाल करने का इंटरफ़ेस है. इन सेवाओं को मैप के साथ इस्तेमाल करने के लिए डिज़ाइन किया गया है. ऐसा Google Maps Platform की सेवा की शर्तों में दिए गए लाइसेंस से जुड़ी पाबंदियों के मुताबिक किया जाता है.

Maps API वेब सेवाएं, खास यूआरएल पर एचटीटीपी पैरामीटर का इस्तेमाल करती हैं और यूआरएल पैरामीटर पास करती हैं और/या JSON-फ़ॉर्मैट की पोस्ट डेटा को, सेवाओं के लिए आर्ग्युमेंट के तौर पर इस्तेमाल करती हैं. आम तौर पर, ये सेवाएं आपके ऐप्लिकेशन के डेटा को पार्स करने और/या प्रोसेस करने के लिए, एचटीटीपी या एचटीटीपीएस अनुरोध को JSON या एक्सएमएल के तौर पर इस्तेमाल करती हैं.

आम तौर पर, निर्देश पाने वाला एपीआई अनुरोध आम तौर पर इस फ़ॉर्म के लिए किया जाता है:

https://maps.googleapis.com/maps/api/directions/output?parameters

जहां output, रिस्पॉन्स फ़ॉर्मैट (आम तौर पर json या xml) को दिखाता है.

ध्यान दें: निर्देश पाने वाले सभी एपीआई ऐप्लिकेशन के लिए पुष्टि करना ज़रूरी है. पुष्टि करने के लिए क्रेडेंशियल के बारे में ज़्यादा जानकारी पाएं.

SSL/TLS ऐक्सेस

एचटीटीपीएस, Google Maps Platform के उन सभी अनुरोधों के लिए ज़रूरी है जो एपीआई कुंजियों का इस्तेमाल करते हैं या जिनमें उपयोगकर्ता का डेटा होता है. संवेदनशील जानकारी वाले एचटीटीपी से किए गए अनुरोधों को अस्वीकार किया जा सकता है.

एक मान्य यूआरएल बनाना

आपको लग सकता है कि कोई यूआरएल मान्य है और यूआरएल अपने-आप बताने वाला है, लेकिन ऐसा नहीं है. उदाहरण के लिए, किसी ब्राउज़र में पता बार में डाले गए यूआरएल में विशेष वर्ण (जैसे, "上海+中國") हो सकते हैं. ब्राउज़र को ट्रांसमिशन से पहले, उन वर्णों को अंदरूनी तौर पर किसी दूसरी एन्कोडिंग में बदलना होगा. एक ही टोकन के ज़रिए, ऐसा कोई भी कोड जो UTF-8 इनपुट जनरेट करता है या स्वीकार करता है, वह UTF-8 वर्णों वाले यूआरएल को "कोट; इस प्रोसेस को यूआरएल-एन्कोडिंग या प्रतिशत-एन्कोडिंग कहा जाता है.

खास वर्ण

हमें विशेष वर्णों का अनुवाद करना होगा, क्योंकि सभी यूआरएल को यूनिफ़र रिसोर्स आइडेंटिफ़ायर (यूआरआई) की विशेषताओं में दिए गए सिंटैक्स के मुताबिक होना चाहिए. इसका मतलब यह है कि यूआरएल में ASCII वर्णों का सिर्फ़ एक खास सबसेट होना चाहिए: जाने-पहचाने अक्षर और अंक, और यूआरएल में कुछ वर्णों को कंट्रोल कैरेक्टर के तौर पर इस्तेमाल करने के लिए, कुछ रिज़र्व किए गए वर्णों का इस्तेमाल करना. इस टेबल में इन वर्णों के बारे में खास जानकारी होती है:

मान्य यूआरएल वर्णों के बारे में खास जानकारी
सेट करेंवर्णयूआरएल का इस्तेमाल
अक्षर और अंक दोनों शामिल हो सकते हैं a b c d e f g h i j j l m h na p q k r इनमें l w z w w w h w 9 बना r 4 s 4 d टेक्स्ट स्ट्रिंग, स्कीम यूसेज (http), पोर्ट (8080), वगैरह.
गैर-आरक्षित - _ . ~ टेक्स्ट स्ट्रिंग
बुक किया हुआ ! * और #39; ( ) ; : @ & = + $ , / ? % # [ ] वर्णों और/या टेक्स्ट स्ट्रिंग को कंट्रोल करना

मान्य यूआरएल बनाते समय, आपको यह पक्का करना होगा कि उसमें सिर्फ़ वही वर्ण शामिल हों जो मान्य यूआरएल वर्ण टेबल में दिए गए हैं. वर्णों के इस सेट का इस्तेमाल करने के लिए यूआरएल बनाने से आम तौर पर दो समस्याएं आती हैं. इनमें से एक गड़बड़ी और बदलाव का उदाहरण है:

  • आप जिन वर्णों को हैंडल करना चाहते हैं वे ऊपर दिए गए सेट से बाहर मौजूद हैं. उदाहरण के लिए, 上海+中國 जैसी विदेशी भाषाओं के वर्णों को, ऊपर दिए गए वर्णों का इस्तेमाल करके एन्कोड किया जाना चाहिए. लोकप्रिय कन्वेंशन के मुताबिक, स्पेस के बारे में अक्सर प्लस '+' वर्ण का इस्तेमाल करके भी बताया जाता है. यूआरएल के अंदर इसकी अनुमति नहीं है.
  • वर्ण ऊपर दिए गए वर्णों में रिज़र्व किए गए वर्णों के तौर पर मौजूद होते हैं, लेकिन उनका इस्तेमाल लिटरल तौर पर किया जाना चाहिए. उदाहरण के लिए, क्वेरी में स्ट्रिंग की शुरुआत दिखाने के लिए, ? का इस्तेमाल यूआरएल में किया जाता है. अगर आपको स्ट्रिंग और कोट का इस्तेमाल करना है, तो रहस्य और &कोश का इस्तेमाल करें. आपको '?' वर्ण को कोड में बदलना होगा.

सभी वर्ण, यूआरएल-कोड में बदले जाते हैं. इसके लिए, '%' वर्ण का इस्तेमाल किया जाता है. साथ ही, उनके 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 की सभी वेब सेवाओं और स्टैटिक वेब एपीआई के लिए, यूआरएल 8192 वर्णों तक सीमित हैं. ज़्यादातर सेवाओं के लिए, इस वर्ण सीमा का इस्तेमाल शायद ही कभी किया जाएगा. हालांकि, ध्यान दें कि कुछ सेवाओं में कई पैरामीटर होते हैं, जिनकी वजह से लंबे यूआरएल बन सकते हैं.

Google API का विनम्र उपयोग

खराब तरीके से डिज़ाइन किए गए एपीआई क्लाइंट, इंटरनेट और Google के सर्वर, दोनों पर ज़रूरत से ज़्यादा लोड कर सकते हैं. इस सेक्शन में, एपीआई के क्लाइंट के लिए कुछ सबसे सही तरीके दिए गए हैं. इन सबसे सही तरीकों का इस्तेमाल करने से, आपको अपने ऐप्लिकेशन को एपीआई के गलत इस्तेमाल की वजह से ब्लॉक होने से बचाने में मदद मिल सकती है.

एक्स्पोनेंशल बैकऑफ़

कुछ मामलों में ऐसा हो सकता है कि आपके अनुरोध को पूरा करते समय कोई गड़बड़ी हो जाए; आपको 4XX या 5XX एचटीटीपी रिस्पॉन्स कोड मिल सकता है या टीसीपी कनेक्शन आपके क्लाइंट और Google के सर्वर के बीच में कहीं विफल हो सकता है. अक्सर फ़ॉलो अप के लिए दोबारा कोशिश करना फ़ायदेमंद होता है, क्योंकि फ़ॉलो अप अनुरोध फ़ेल होने पर सफल हो सकता है. हालांकि, यह ज़रूरी है कि आप Google के सर्वर पर बार-बार अनुरोध न करें. इस लूपिंग व्यवहार की वजह से, आपके क्लाइंट और Google के बीच नेटवर्क पर दबाव पड़ सकता है. इस वजह से कई पक्षों को समस्या हो सकती है.

कोशिश करने के बीच ज़्यादा समय लेने की कोशिश करना ही बेहतर तरीका है. आम तौर पर, देरी की वजह से हर बार कोशिश करने पर, गुणा करने का तरीका कई गुना बढ़ जाता है. इसे एक्स्पोनेंशियल बैकऑफ़ कहा जाता है.

उदाहरण के लिए, उस ऐप्लिकेशन पर विचार करें जो समय क्षेत्र एपीआई का अनुरोध करना चाहता है:

https://maps.googleapis.com/maps/api/timezone/json?location=39.6034810,-119.6822510&timestamp=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 की वेब सेवाएं, ऐसे जवाब देती हैं जिन्हें समझना आसान है, लेकिन ये उपयोगकर्ता के लिए आसान नहीं हैं. डेटा का सेट दिखाने के बजाय, क्वेरी करते समय, शायद आप कुछ खास वैल्यू को निकालना चाहें. आम तौर पर, आप वेब सेवा के जवाबों को पार्स करना चाहेंगे और सिर्फ़ उन वैल्यू को निकालना चाहेंगे जिनमें आपकी दिलचस्पी है.

पार्स करने वाली स्कीम इस बात पर निर्भर करती है कि आप एक्सएमएल या JSON में आउटपुट दे रहे हैं या नहीं. JSON के रिस्पॉन्स, JavaScript ऑब्जेक्ट के तौर पर पहले से मौजूद होते हैं. इन्हें क्लाइंट पर JavaScript में ही प्रोसेस किया जा सकता है. एक्सएमएल प्रोसेस में एक्सएमएल प्रोसेसर का इस्तेमाल करके प्रोसेस किया जाना चाहिए. साथ ही, एक्सएमएल फ़ॉर्मैट में मौजूद एलिमेंट को ठीक करने के लिए, एक्सएमएल क्वेरी भाषा का इस्तेमाल किया जाना चाहिए. हम नीचे दिए गए उदाहरणों में XPath का इस्तेमाल करते हैं, क्योंकि यह आम तौर पर एक्सएमएल प्रोसेसिंग लाइब्रेरी में काम करता है.

XPath के साथ XML प्रोसेस करना

एक्सएमएल एक ऐसा कॉन्टेंट है जो स्ट्रक्चर्ड जानकारी से मिलता-जुलता है. इसका इस्तेमाल डेटा इंटरचेंज के लिए किया जाता है. हालांकि, यह JSON की तरह हल्का नहीं होता है, लेकिन एक्सएमएल में भाषा के लिए ज़्यादा सहायता और ज़्यादा बेहतर टूल मिलते हैं. उदाहरण के लिए, Java में एक्सएमएल को प्रोसेस करने का कोड, javax.xml पैकेज में बनाया जाता है.

एक्सएमएल के नतीजों को प्रोसेस करते समय, एक्सएमएल दस्तावेज़ में नोड चुनने के लिए आपको क्वेरी की सही भाषा का इस्तेमाल करना चाहिए. एक्सएमएल के मार्कअप में एलिमेंट को पूरे पोज़िशन पर रखा जाना चाहिए. XPath एक भाषा सिंटैक्स है, जो किसी एक्सएमएल दस्तावेज़ में मौजूद नोड और एलिमेंट की खास जानकारी देता है. XPath एक्सप्रेशन की मदद से, आप एक्सएमएल रिस्पॉन्स दस्तावेज़ में खास कॉन्टेंट की पहचान कर सकते हैं.

XPath एक्सप्रेशन

XPath के बारे में कुछ जानकारी, एक मज़बूत पार्सिंग स्कीम बनाने में बहुत कारगर साबित होती है. इस सेक्शन में यह बताया जाएगा कि एक्सएमएल दस्तावेज़ में मौजूद एलिमेंट को एलिमेंट के साथ कैसे ठीक किया जाता है. इससे आप एक से ज़्यादा एलिमेंट की समस्या को ठीक कर सकते हैं और मुश्किल क्वेरी बना सकते हैं.

XPath, एक्सएमएल दस्तावेज़ में मौजूद एलिमेंट को चुनने के लिए, एक्सप्रेशन का इस्तेमाल करता है. इसके लिए, वह डायरेक्ट्री पाथ के लिए इस्तेमाल किए जाने वाले सिंटैक्स से मिलता-जुलता है. ये एक्सप्रेशन किसी एक्सएमएल दस्तावेज़ ट्री में एलिमेंट की पहचान करते हैं. जो किसी डीओएम से मिलता-जुलता है. आम तौर पर, 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>

एक्सप्रेशन में नोड का चुनाव

फ़ोल्डर में बदलने की सुविधा के लिए नोड चुनें. रूट नोड पूरे दस्तावेज़ को शामिल करता है. आप खास एक्सप्रेशन और कोट;/&quot का इस्तेमाल करके इस नोड को चुनते हैं. ध्यान दें कि रूट नोड आपके एक्सएमएल दस्तावेज़ का टॉप-लेवल नोड नहीं है; असल में, यह इन टॉप-लेवल एलिमेंट के ऊपर का एक लेवल और इसे शामिल करता है.

एलिमेंट नोड एक्सएमएल दस्तावेज़ ट्री में मौजूद अलग-अलग एलिमेंट को दिखाते हैं. उदाहरण के लिए, <WebServiceResponse> एलिमेंट, ऊपर दी गई हमारी सैंपल सेवा में दिखाए गए टॉप लेवल एलिमेंट की जानकारी देता है. आप ऐब्सोल्यूट या रिलेटिव पाथ से अलग-अलग नोड चुनते हैं, जो किसी मुख्य "/" कैरेक्टर की मौजूदगी या अमौजूद होने से पता चलता है.

  • एब्सोल्यूट पाथ: "/WebServiceResponse/result" एक्सप्रेशन उन सभी <result> नोड को चुनता है जो <WebServiceResponse> नोड के चाइल्ड हैं. (ध्यान दें कि ये दोनों एलिमेंट रूट नोड और कोट से आते हैं;/".)
  • मौजूदा कॉन्टेक्स्ट से मिलता-जुलता पाथ: एक्सप्रेशन और कोट;result" मौजूदा कॉन्टेक्स्ट में मौजूद किसी भी <result> एलिमेंट से मेल खाएगा. आम तौर पर, आपको संदर्भ के बारे में चिंता करने की ज़रूरत नहीं है, क्योंकि आम तौर पर आप एक ही एक्सप्रेशन की मदद से, वेब सेवा के नतीजों को प्रोसेस करते हैं.

इन दोनों में से किसी भी एक्सप्रेशन को वाइल्डकार्ड पाथ के साथ जोड़ा जा सकता है. इसके लिए, डबल-स्लैश ("//") का इस्तेमाल किया जा सकता है. इस वाइल्डकार्ड से पता चलता है कि इंटरवेंशन के पाथ में शून्य या उससे ज़्यादा एलिमेंट मैच हो सकते हैं. XPath एक्सप्रेशन और कोट;//formatted_address," उदाहरण के लिए, मौजूदा दस्तावेज़ में उस नाम के सभी नोड का मिलान होगा. एक्सप्रेशन //viewport//lat उन सभी <lat> एलिमेंट से मेल खाएगा जो <viewport> अभिभावक के रूप में ट्रेस कर सकते हैं.

डिफ़ॉल्ट रूप से, XPath एक्सप्रेशन सभी एलिमेंट से मेल खाते हैं. आप प्रेडिकेट देकर किसी एक्सप्रेशन का मिलान करने के लिए एक्सप्रेशन को प्रतिबंधित कर सकते हैं, जो वर्ग ब्रैकेट में [] में बंद होता है. XPath एक्सप्रेशन और कोट;/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>
    
result का name, जिसका type टेक्स्ट "sample." है
XPath एक्सप्रेशन: "/WebServiceResponse/result[type/text()='sample']/name"
चुनना:
    Sample XML
    

ध्यान रखें कि एलिमेंट चुनते समय आप नोड चुनते हैं, न कि सिर्फ़ उन ऑब्जेक्ट में मौजूद टेक्स्ट. आम तौर पर, आपको मेल खाने वाले सभी नोड पर दोहराने और टेक्स्ट को निकालना होगा. आप सीधे टेक्स्ट नोड से भी मैच कर सकते हैं; नीचे टेक्स्ट नोड देखें.

ध्यान दें कि XPath एट्रिब्यूट के नोड के साथ भी काम करता है. हालांकि, Google Maps की सभी वेब सेवाएं, एट्रिब्यूट के बिना एलिमेंट को दिखाती हैं. इसलिए, एट्रिब्यूट का मिलान करना ज़रूरी नहीं है.

एक्सप्रेशन में टेक्स्ट चुनना

एक्सएमएल दस्तावेज़ में मौजूद टेक्स्ट, टेक्स्ट नोड ऑपरेटर के ज़रिए XPath एक्सप्रेशन में बताया जाता है. यह ऑपरेटर और "text()" बताए गए नोड से टेक्स्ट निकालता है. उदाहरण के लिए, XPath एक्सप्रेशन और कोट;//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
    

इसके अलावा, आप किसी एक्सप्रेशन का आकलन करके नोड के सेट को लौटा सकते हैं और फिर उस नोड के सेट पर दोहरा सकते हैं (&t) और हर नोड से टेक्स्ट निकाल सकते हैं. नीचे दिए गए उदाहरण में हम इस तरीके का इस्तेमाल करते हैं.

XPath के बारे में ज़्यादा जानकारी के लिए, XPath W3C की खास बातें देखें.

Java में XPath का आकलन करना

Java को एक्सएमएल और पार्सिंग एक्सप्रेशन के लिए, javax.xml.xpath.* पैकेज के साथ काम करने की सुविधा मिलती है. इसी वजह से, इस सेक्शन में नमूने के तौर पर दिया गया कोड, Java सेवा का इस्तेमाल करके यह बताता है कि एक्सएमएल सेवा के जवाबों से डेटा को कैसे पार्स करना है और डेटा को कैसे पार्स करना है.

अपने Java कोड में XPath का इस्तेमाल करने के लिए, आपको सबसे पहले XPathFactory का एक इंस्टेंस इंस्टैंशिएट करना होगा और XPath ऑब्जेक्ट बनाने के लिए उस फ़ैक्ट्री पर newXPath() को कॉल करना होगा. इसके बाद, यह ऑब्जेक्ट evaluate() तरीके का इस्तेमाल करके, पास किए गए एक्सएमएल और XPath एक्सप्रेशन को प्रोसेस कर सकता है.

XPath एक्सप्रेशन का आकलन करते समय, पक्का करें कि आपने हर संभव कोटेशन और कोट; को दोहराया है. इन नतीजों को Java कोड में DOM नोड के रूप में दिखाया जाता है. इसलिए, आपको NodeList ऑब्जेक्ट में ऐसी कई वैल्यू कैप्चर करनी होंगी और उन नोड से किसी भी टेक्स्ट या वैल्यू को निकालने के लिए, उस ऑब्जेक्ट को दोहराना होगा.

इस कोड में दिखाया गया है कि XPath ऑब्जेक्ट कैसे बनाया जाता है, इसे एक्सएमएल असाइन करें, और एक्सप्रेशन को हल करें. साथ ही, सही कॉन्टेंट को प्रिंट करने के लिए एक्सप्रेशन का आकलन करें.

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");
    }
  }
}