XPath Tester

XML पर XPath अभिव्यक्तियों का परीक्षण करें और सभी मेल खाने वाले नोड्स देखें

उदाहरण देखें

XML इनपुट

स्थानीय रूप से चलता है · सीक्रेट पेस्ट करना सुरक्षित है

XPath क्या है?

XPath (XML Path Language) एक XML दस्तावेज़ से नोड्स चुनने के लिए एक क्वेरी भाषा है। W3C द्वारा XSLT मानक के अंग के रूप में परिभाषित, XPath एक XML दस्तावेज़ को नोड्स के वृक्ष के रूप में मानता है और उस वृक्ष में नेविगेट करने के लिए एक पथ-आधारित syntax प्रदान करता है। //book[@category="fiction"]/title जैसी XPath अभिव्यक्ति उन सभी title एलिमेंट चुनती है जो किसी ऐसे book एलिमेंट के अंतर्गत हों जिसका category विशेषता "fiction" के बराबर हो। XPath 1.0, जो सभी प्रमुख ब्राउज़रों और अधिकांश XML लाइब्रेरियों द्वारा समर्थित संस्करण है, 1999 में W3C अनुशंसा के रूप में प्रकाशित हुआ था और आज भी सबसे व्यापक रूप से उपयोग किया जाने वाला संस्करण है।

XPath अभिव्यक्तियाँ चार परिणाम प्रकारों में से एक लौटाती हैं: नोड सेट, स्ट्रिंग, संख्या, या बूलीन। नोड सेट सबसे सामान्य परिणाम है और इसमें शून्य या अधिक XML नोड्स (एलिमेंट, विशेषताएं, टेक्स्ट नोड्स, टिप्पणियाँ, या प्रोसेसिंग निर्देश) होते हैं। स्ट्रिंग, संख्या और बूलीन परिणाम XPath फ़ंक्शनों जैसे count(), sum(), contains(), और बूलीन तुलनाओं से आते हैं। यह टाइप सिस्टम XPath को डेटा निष्कर्षण और XSLT स्टाइलशीट तथा XML Schema अभिकथनों में सशर्त तर्क लिखने दोनों के लिए उपयुक्त बनाता है।

संस्करण 1.0 की अभिव्यक्तियाँ हर जगह काम करती हैं: JavaScript के document.evaluate(), Python के lxml और ElementTree, Java के javax.xml.xpath, PHP के DOMXPath, और xmllint जैसे कमांड-लाइन उपकरणों में। संस्करण 2.0 और 3.1 समृद्ध टाइप सिस्टम और फ़ंक्शन जोड़ते हैं, लेकिन इनके लिए Saxon जैसे समर्पित इंजन आवश्यक होते हैं। डिफ़ॉल्ट रूप से संस्करण 1.0 का उपयोग करें। 2.0 या 3.1 की ओर तभी जाएं जब आपको अनुक्रम, नियमित अभिव्यक्तियाँ, या उच्च-क्रम फ़ंक्शन चाहिए — और Saxon या BaseX पर निर्भरता स्वीकार करें।

ऑनलाइन XPath Tester क्यों उपयोग करें?

सही अभिव्यक्तियाँ लिखने के लिए दस्तावेज़ संरचना को समझना और वास्तविक डेटा पर टेस्ट करना ज़रूरी है। यह टूल आपको बिना कोई प्रोजेक्ट सेट किए या बॉयलरप्लेट कोड लिखे, expressions को iterate करने के लिए एक interactive environment देता है।

अभिव्यक्तियों का तत्काल परीक्षण
अपना XML चिपकाएं, एक अभिव्यक्ति टाइप करें, और तुरंत मेल खाने वाले नोड्स देखें। कोई संकलन चरण नहीं, कोई REPL सेटअप नहीं, कोई निर्भरता स्थापित करने की आवश्यकता नहीं।
🔒
प्राइवेसी-फर्स्ट प्रोसेसिंग
सभी XML पार्सिंग और क्वेरी मूल्यांकन आपके ब्राउज़र में मूल DOMParser और document.evaluate() API का उपयोग करके होता है। आपका XML डेटा कभी भी आपके कंप्यूटर से बाहर नहीं जाता।
🔍
जटिल क्वेरी को चरण-दर-चरण डीबग करें
लंबी अभिव्यक्तियों को प्रत्येक अक्ष और predicate का व्यक्तिगत रूप से परीक्षण करके विभाजित करें। त्रुटियों को अलग करने के लिए देखें कि प्रत्येक चरण पर कौन से नोड मेल खाते हैं।
📋
दस्तावेज़ीकरण के लिए परिणाम प्रतिलिपि करें
एक क्लिक से मेल खाने वाले नोड या scalar results प्रतिलिपि करें। बग रिपोर्ट, परीक्षण अभिकथन, या डेटा निष्कर्षण स्क्रिप्ट में चिपकाने के लिए उपयोगी।

XPath Tester के उपयोग के मामले

Frontend Developer
SVG संचालन या XML-आधारित कॉन्फ़िगरेशन के लिए XPath चयनकर्ताओं का परीक्षण करें, इससे पहले कि आप उन्हें उस JavaScript कोड में सम्मिलित करें जो document.evaluate() को कॉल करता है।
बैकएंड इंजीनियर
Python, Java, या Go में निष्कर्षण तर्क लिखने से पहले SOAP प्रतिक्रियाओं या XML API पेलोड के विरुद्ध क्वेरी को सत्यापित करें।
DevOps / अवसंरचना
XML कॉन्फ़िगरेशन फ़ाइलों (Maven pom.xml, Spring beans, CI पाइपलाइन कॉन्फ़िग) को क्वेरी करके निर्भरता संस्करण निकालें या फ़ाइलें संपादित किए बिना सेटिंग्स सत्यापित करें।
QA / परीक्षण स्वचालन
Selenium या Playwright के लिए XPath लोकेटर बनाएं और सत्यापित करें, इससे पहले कि उन्हें परीक्षण स्क्रिप्ट में जोड़ें। अनुपस्थित विशेषताओं या नेमस्पेस उपसर्गों जैसे सीमांत मामलों का परीक्षण करें।
डेटा इंजीनियर
XML डेटा फ़ीड (RSS, Atom, XBRL वित्तीय रिपोर्ट) के लिए क्वेरी का प्रोटोटाइप तैयार करें, इससे पहले कि उन्हें ETL पाइपलाइन में जोड़ें।
विद्यार्थी / सीखने वाला
नमूना XML का उपयोग करके XPath अक्षों, predicates और फ़ंक्शनों के साथ प्रयोग करें। वृक्ष अनुक्रमण पैटर्न के लिए अंतर्ज्ञान विकसित करने हेतु तुरंत परिणाम देखें।

XPath अक्ष संदर्भ

एक अक्ष वर्तमान (संदर्भ) नोड के सापेक्ष नेविगेशन की दिशा परिभाषित करता है। पूर्ण syntax axis::node-test[predicate] है, हालांकि अधिकांश डेवलपर्स आमतौर पर संक्षिप्त रूपों (//, @, ..) का उपयोग करते हैं। यह तालिका व्यावहारिक उदाहरणों के साथ सभी 1.0 अक्ष सूचीबद्ध करती है।

अक्षउदाहरणविवरण
childchild::bookDirect children named "book"
descendantdescendant::titleAll "title" elements at any depth
parentparent::*The parent of the current node
ancestorancestor::catalogAll ancestors named "catalog"
following-siblingfollowing-sibling::bookSiblings after the current node
preceding-siblingpreceding-sibling::bookSiblings before the current node
attributeattribute::langThe "lang" attribute of the node
selfself::bookThe current node if it is "book"
descendant-or-self//titleShorthand: any "title" in the tree
ancestor-or-selfancestor-or-self::*Current node plus all ancestors

XPath 1.0 फ़ंक्शन

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

फ़ंक्शनश्रेणीविवरण
text()Node testSelects text content of a node
position()NumericReturns 1-based position in node set
last()NumericReturns size of current node set
count()NumericCounts nodes: count(//book)
contains()Stringcontains(@class, "active") — substring match
starts-with()Stringstarts-with(title, "The") — prefix match
normalize-space()StringStrips leading/trailing whitespace
string-length()NumericReturns character count of a string
sum()Numericsum(//price) — totals numeric values
not()Booleannot(@disabled) — negation
name()StringReturns element or attribute name

कोड उदाहरण

ये उदाहरण दिखाते हैं कि अभिव्यक्तियों का प्रोग्रामेटिक रूप से मूल्यांकन कैसे करें। प्रत्येक उदाहरण समान catalog.xml संरचना का उपयोग करता है ताकि आप विभिन्न भाषाओं में API अंतर की तुलना कर सकें।

JavaScript (browser)
const xml = `<catalog>
  <book id="1"><title>1984</title><price>7.99</price></book>
  <book id="2"><title>Dune</title><price>12.99</price></book>
</catalog>`

const parser = new DOMParser()
const doc = parser.parseFromString(xml, 'application/xml')

// Select all book titles
const result = doc.evaluate('//book/title', doc, null, XPathResult.ORDERED_NODE_ITERATOR_TYPE, null)
let node = result.iterateNext()
while (node) {
  console.log(node.textContent) // → "1984", "Dune"
  node = result.iterateNext()
}

// Get a numeric value
const sum = doc.evaluate('sum(//price)', doc, null, XPathResult.NUMBER_TYPE, null)
console.log(sum.numberValue) // → 20.98
Python (lxml)
from lxml import etree

xml = """<catalog>
  <book id="1"><title>1984</title><price>7.99</price></book>
  <book id="2"><title>Dune</title><price>12.99</price></book>
</catalog>"""

tree = etree.fromstring(xml.encode())

# Select elements by attribute
books = tree.xpath('//book[@id="1"]/title/text()')
print(books)  # → ['1984']

# Use predicates with position
first = tree.xpath('//book[1]/title/text()')
print(first)  # → ['1984']

# Boolean check
has_cheap = tree.xpath('boolean(//price[. < 10])')
print(has_cheap)  # → True
Java (javax.xml.xpath)
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.xpath.*;
import org.w3c.dom.*;

var factory = DocumentBuilderFactory.newInstance();
var builder = factory.newDocumentBuilder();
var doc = builder.parse(new java.io.File("catalog.xml"));

var xpath = XPathFactory.newInstance().newXPath();

// Select node set
NodeList titles = (NodeList) xpath.evaluate(
    "//book/title", doc, XPathConstants.NODESET
);
for (int i = 0; i < titles.getLength(); i++) {
    System.out.println(titles.item(i).getTextContent());
    // → "1984", "Dune"
}

// Evaluate to number
double total = (double) xpath.evaluate(
    "sum(//price)", doc, XPathConstants.NUMBER
);
System.out.println(total); // → 20.98
CLI (xmllint)
# Select all book titles
xmllint --xpath '//book/title/text()' catalog.xml
# → 1984Dune

# Select by attribute
xmllint --xpath '//book[@id="2"]/title' catalog.xml
# → <title>Dune</title>

# Count nodes
xmllint --xpath 'count(//book)' catalog.xml
# → 2

# Using xmlstarlet for formatted output
xmlstarlet sel -t -v '//book/title' -n catalog.xml
# → 1984
# → Dune

अक्सर पूछे जाने वाले प्रश्न

XPath 1.0 और XPath 3.1 में क्या अंतर है?
संस्करण 1.0 में चार डेटा प्रकार (नोड सेट, स्ट्रिंग, संख्या, बूलीन) और 27 फ़ंक्शन हैं। संस्करण 3.1 अनुक्रम, मानचित्र, ऐरे, दिनांक/समय प्रकार, नियमित अभिव्यक्तियाँ, उच्च-क्रम फ़ंक्शन और JSON समर्थन जोड़ता है। ब्राउज़र और अधिकांश मानक लाइब्रेरियाँ केवल संस्करण 1.0 लागू करती हैं। संस्करण 3.1 के लिए Saxon जैसा समर्पित इंजन आवश्यक है।
मैं किसी विशिष्ट विशेषता मान वाले नोड कैसे चुनूं?
विशेषता अक्ष के लिए @ संक्षिप्त रूप के साथ predicate का उपयोग करें। उदाहरण के लिए, //book[@category="fiction"] उन सभी book एलिमेंट चुनता है जहाँ category विशेषता "fiction" के बराबर है। आप एकाधिक predicate जोड़ सकते हैं: //book[@category="fiction"][@year > 2000]।
मेरा XPath कोई परिणाम क्यों नहीं लौटाता जबकि XML में मेल खाने वाले एलिमेंट हैं?
सबसे सामान्य कारण XML नेमस्पेस है। यदि आपका XML एक डिफ़ॉल्ट नेमस्पेस (xmlns="...") घोषित करता है, तो एलिमेंट बिना उपसर्ग के भी उस नेमस्पेस से संबंधित होते हैं। संस्करण 1.0 में, आपको नेमस्पेस पंजीकृत करना होगा और अपनी अभिव्यक्ति में उपसर्ग का उपयोग करना होगा। ब्राउज़र JavaScript में, document.evaluate() के तीसरे तर्क के रूप में एक नेमस्पेस रिज़ॉल्वर पास करें।
क्या XPath XML सामग्री को संशोधित कर सकता है?
नहीं। यह एक केवल-पठन क्वेरी भाषा है। यह नोड्स चुनती और मूल्यांकन करती है, किंतु उन्हें सम्मिलित, हटा, या अद्यतन नहीं कर सकती। XML को संशोधित करने के लिए XSLT रूपांतरण, DOM संचालन विधियाँ, या Python के lxml जैसी लाइब्रेरी का उपयोग करें जो संपादन के लिए अलग API प्रदान करती हैं।
XPath में दोहरे स्लैश (//) का अर्थ क्या है?
दोहरा स्लैश descendant-or-self अक्ष का संक्षिप्त रूप है। //title अभिव्यक्ति का अर्थ है "दस्तावेज़ वृक्ष में किसी भी गहराई पर सभी title एलिमेंट चुनें।" यह पूर्ण रूप /descendant-or-self::node()/title के समतुल्य है। // से शुरू करने पर पूरे दस्तावेज़ में खोज होती है; मध्य-पथ उपयोग (जैसे /catalog//title) किसी विशिष्ट नोड के वंशजों में खोज करता है।
एलिमेंट नोड के बजाय टेक्स्ट सामग्री कैसे चुनूं?
अपनी अभिव्यक्ति में /text() जोड़ें। उदाहरण के लिए, //book/title/text() प्रत्येक title एलिमेंट की टेक्स्ट सामग्री एलिमेंट नोड के बजाय स्ट्रिंग नोड के रूप में लौटाता है। कोड में, आप text() का उपयोग किए बिना लौटाए गए एलिमेंट नोड पर .textContent भी प्राप्त कर सकते हैं।
क्या XML क्वेरी के लिए XPath CSS सेलेक्टर से तेज़ है?
CSS सेलेक्टर HTML और ब्राउज़र में DOM अनुक्रमण के लिए अनुकूलित हैं। XPath अधिक अभिव्यंजक है: यह मूल नोड अनुक्रमण, sibling axis, संख्यात्मक predicate, और अंतर्निर्मित फ़ंक्शन का समर्थन करता है जो CSS सेलेक्टर व्यक्त नहीं कर सकते। HTML के लिए, CSS सेलेक्टर (querySelector) सामान्यतः तेज़ होते हैं। XML के लिए, अधिकांश सर्वर-साइड लाइब्रेरियाँ केवल XPath उजागर करती हैं — CSS सेलेक्टर वहाँ कोई विकल्प ही नहीं होते।