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 देता है।
XPath Tester के उपयोग के मामले
XPath अक्ष संदर्भ
एक अक्ष वर्तमान (संदर्भ) नोड के सापेक्ष नेविगेशन की दिशा परिभाषित करता है। पूर्ण syntax axis::node-test[predicate] है, हालांकि अधिकांश डेवलपर्स आमतौर पर संक्षिप्त रूपों (//, @, ..) का उपयोग करते हैं। यह तालिका व्यावहारिक उदाहरणों के साथ सभी 1.0 अक्ष सूचीबद्ध करती है।
| अक्ष | उदाहरण | विवरण |
|---|---|---|
| child | child::book | Direct children named "book" |
| descendant | descendant::title | All "title" elements at any depth |
| parent | parent::* | The parent of the current node |
| ancestor | ancestor::catalog | All ancestors named "catalog" |
| following-sibling | following-sibling::book | Siblings after the current node |
| preceding-sibling | preceding-sibling::book | Siblings before the current node |
| attribute | attribute::lang | The "lang" attribute of the node |
| self | self::book | The current node if it is "book" |
| descendant-or-self | //title | Shorthand: any "title" in the tree |
| ancestor-or-self | ancestor-or-self::* | Current node plus all ancestors |
XPath 1.0 फ़ंक्शन
यह भाषा चार श्रेणियों में 27 अंतर्निर्मित फ़ंक्शन परिभाषित करती है: नोड सेट, स्ट्रिंग, संख्या और बूलीन। ये वे फ़ंक्शन हैं जिनका उपयोग आप क्वेरी लिखते समय सबसे अधिक करेंगे। सभी इस परीक्षक और प्रत्येक अनुपालक कार्यान्वयन द्वारा समर्थित हैं।
| फ़ंक्शन | श्रेणी | विवरण |
|---|---|---|
| text() | Node test | Selects text content of a node |
| position() | Numeric | Returns 1-based position in node set |
| last() | Numeric | Returns size of current node set |
| count() | Numeric | Counts nodes: count(//book) |
| contains() | String | contains(@class, "active") — substring match |
| starts-with() | String | starts-with(title, "The") — prefix match |
| normalize-space() | String | Strips leading/trailing whitespace |
| string-length() | Numeric | Returns character count of a string |
| sum() | Numeric | sum(//price) — totals numeric values |
| not() | Boolean | not(@disabled) — negation |
| name() | String | Returns element or attribute name |
कोड उदाहरण
ये उदाहरण दिखाते हैं कि अभिव्यक्तियों का प्रोग्रामेटिक रूप से मूल्यांकन कैसे करें। प्रत्येक उदाहरण समान catalog.xml संरचना का उपयोग करता है ताकि आप विभिन्न भाषाओं में API अंतर की तुलना कर सकें।
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.98from 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) # → Trueimport 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# 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