ToolDeck

XPath পরীক্ষক

XML-এর বিপরীতে XPath এক্সপ্রেশন পরীক্ষা করুন এবং সব মিলে যাওয়া নোড দেখুন

একটি উদাহরণ চেষ্টা করুন

XML ইনপুট

স্থানীয়ভাবে চলে · গোপন তথ্য পেস্ট করা নিরাপদ

XPath কী?

XPath (XML Path Language) হলো একটি কুয়েরি ভাষা যা XML ডকুমেন্ট থেকে নোড নির্বাচনের জন্য ব্যবহৃত হয়। XSLT স্ট্যান্ডার্ডের অংশ হিসেবে W3C-এর তৈরি করা, XPath একটি XML ডকুমেন্টকে নোডের গাছ হিসেবে বিবেচনা করে এবং সেই গাছে নেভিগেট করার জন্য পথ-ভিত্তিক সিনট্যাক্স প্রদান করে। //book[@category="fiction"]/title-এর মতো একটি XPath এক্সপ্রেশন প্রতিটি book উপাদানের ভেতরে থাকা title উপাদান নির্বাচন করে যার category অ্যাট্রিবিউটের মান "fiction"। XPath 1.0, যে সংস্করণটি সব প্রধান ব্রাউজার এবং অধিকাংশ XML লাইব্রেরি সমর্থন করে, ১৯৯৯ সালে W3C Recommendation হিসেবে প্রকাশিত হয় এবং এটি এখনও সর্বাধিক ব্যবহৃত সংস্করণ।

XPath এক্সপ্রেশন চারটি ফলাফল প্রকারের মধ্যে একটি প্রদান করে: নোড সেট, স্ট্রিং, সংখ্যা বা বুলিয়ান। নোড সেট সবচেয়ে সাধারণ ফলাফল এবং এতে শূন্য বা একাধিক XML নোড থাকে (উপাদান, অ্যাট্রিবিউট, টেক্সট নোড, মন্তব্য বা প্রক্রিয়াকরণ নির্দেশনা)। স্ট্রিং, সংখ্যা এবং বুলিয়ান ফলাফল আসে XPath ফাংশন যেমন count(), sum(), contains(), এবং বুলিয়ান তুলনা থেকে। এই কারণেই XPath তথ্য বের করা এবং XSLT স্টাইলশিট ও XML Schema অ্যাসার্শনে শর্তযুক্ত লজিক লেখা — উভয় কাজের জন্যই উপযুক্ত।

Version 1.0 এক্সপ্রেশন সর্বত্র কাজ করে: JavaScript-এর document.evaluate(), Python-এর lxml ও ElementTree, Java-র javax.xml.xpath, PHP-এর DOMXPath, এবং xmllint-এর মতো কমান্ড-লাইন টুলে। Version 2.0 এবং 3.1 আরও শক্তিশালী টাইপ সিস্টেম এবং ফাংশন যোগ করে কিন্তু Saxon-এর মতো নির্দিষ্ট ইঞ্জিন প্রয়োজন। ডিফল্ট হিসেবে Version 1.0 ব্যবহার করুন। শুধুমাত্র তখনই 2.0 বা 3.1-এ যান যখন আপনার সিকোয়েন্স, রেগুলার এক্সপ্রেশন বা উচ্চ-ক্রমের ফাংশন প্রয়োজন — এবং Saxon বা BaseX-এর উপর নির্ভরতা গ্রহণ করুন।

অনলাইন XPath পরীক্ষক কেন ব্যবহার করবেন?

সঠিক এক্সপ্রেশন লিখতে ডকুমেন্টের কাঠামো বোঝা এবং আসল তথ্যের বিপরীতে পরীক্ষা করা প্রয়োজন। এই টুলটি আপনাকে একটি ইন্টারঅ্যাক্টিভ পরিবেশ দেয় যেখানে প্রজেক্ট সেটআপ বা বয়লারপ্লেট কোড না লিখেই এক্সপ্রেশন বারবার বদলে চেষ্টা করা যায়।

তাৎক্ষণিকভাবে এক্সপ্রেশন পরীক্ষা করুন
আপনার XML পেস্ট করুন, একটি এক্সপ্রেশন টাইপ করুন এবং তাৎক্ষণিকভাবে মিলে যাওয়া নোড দেখুন। কোনো কম্পাইলেশন ধাপ নেই, REPL সেটআপ নেই, ইনস্টল করার কোনো নির্ভরতা নেই।
🔒
গোপনীয়তা-প্রথম প্রক্রিয়াকরণ
সমস্ত XML পার্সিং এবং কুয়েরি মূল্যায়ন আপনার ব্রাউজারে নেটিভ DOMParser ও document.evaluate() API ব্যবহার করে চলে। আপনার XML তথ্য কখনো আপনার মেশিন ছেড়ে যায় না।
🔍
ধাপে ধাপে জটিল কুয়েরি ডিবাগ করুন
প্রতিটি অক্ষ এবং প্রেডিকেট আলাদাভাবে পরীক্ষা করে দীর্ঘ এক্সপ্রেশন ছোট ছোট ভাগে ভেঙে দেখুন। ত্রুটি চিহ্নিত করতে প্রতিটি ধাপে ঠিক কোন নোডগুলো মিলছে তা দেখুন।
📋
ডকুমেন্টেশনের জন্য ফলাফল কপি করুন
এক ক্লিকে মিলে যাওয়া নোড বা স্কেলার ফলাফল কপি করুন। বাগ রিপোর্ট, পরীক্ষার অ্যাসার্শন বা তথ্য বের করার স্ক্রিপ্টে পেস্ট করার জন্য উপকারী।

XPath পরীক্ষকের ব্যবহারের ক্ষেত্র

ফ্রন্টেন্ড ডেভেলপার
document.evaluate() কল করে JavaScript কোডে এম্বেড করার আগে SVG ম্যানিপুলেশন বা XML-ভিত্তিক কনফিগারেশনের জন্য XPath সিলেক্টর পরীক্ষা করুন।
ব্যাকএন্ড ইঞ্জিনিয়ার
Python, Java বা Go-তে তথ্য বের করার যুক্তি লেখার আগে SOAP রেসপন্স বা XML API পেলোডের বিপরীতে কুয়েরি যাচাই করুন।
DevOps / অবকাঠামো
ফাইল সম্পাদনা না করেই নির্ভরতার সংস্করণ বের করতে বা সেটিংস যাচাই করতে XML কনফিগারেশন ফাইল (Maven pom.xml, Spring beans, CI পাইপলাইন কনফিগ) কুয়েরি করুন।
QA / টেস্ট অটোমেশন
পরীক্ষার স্ক্রিপ্টে যোগ করার আগে Selenium বা Playwright-এর জন্য XPath লোকেটার তৈরি ও যাচাই করুন। অনুপস্থিত অ্যাট্রিবিউট বা নেমস্পেস প্রিফিক্সের মতো প্রান্তিক ক্ষেত্র পরীক্ষা করুন।
ডেটা ইঞ্জিনিয়ার
ETL পাইপলাইনে সংযুক্ত করার আগে XML ডেটা ফিড (RSS, Atom, XBRL আর্থিক প্রতিবেদন)-এর জন্য কুয়েরির প্রোটোটাইপ তৈরি করুন।
শিক্ষার্থী / বিগিনার
নমুনা XML ব্যবহার করে XPath অক্ষ, প্রেডিকেট এবং ফাংশন নিয়ে পরীক্ষা-নিরীক্ষা করুন। গাছ অতিক্রমণের ধরন সম্পর্কে স্বজ্ঞা তৈরি করতে তাৎক্ষণিকভাবে ফলাফল দেখুন।

XPath অক্ষের রেফারেন্স

একটি অক্ষ বর্তমান (প্রসঙ্গ) নোডের সাপেক্ষে নেভিগেশনের দিক নির্ধারণ করে। পূর্ণ সিনট্যাক্স হলো 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 ফাংশন

ভাষাটি চারটি বিভাগে ২৭টি অন্তর্নির্মিত ফাংশন সংজ্ঞায়িত করে: নোড সেট, স্ট্রিং, সংখ্যা এবং বুলিয়ান। কুয়েরি লেখার সময় আপনি সবচেয়ে বেশি এই ফাংশনগুলো ব্যবহার করবেন। সবগুলোই এই টুলে এবং সব compliant implementation-এ কাজ করে।

ফাংশনবিভাগবিবরণ
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-এর মধ্যে পার্থক্য কী?
Version 1.0-এ চারটি ডেটা টাইপ (নোড সেট, স্ট্রিং, সংখ্যা, বুলিয়ান) এবং ২৭টি ফাংশন রয়েছে। Version 3.1 সিকোয়েন্স, ম্যাপ, অ্যারে, তারিখ/সময় টাইপ, রেগুলার এক্সপ্রেশন, উচ্চ-ক্রমের ফাংশন এবং JSON সমর্থন যোগ করে। ব্রাউজার এবং অধিকাংশ মানক লাইব্রেরি শুধুমাত্র Version 1.0 বাস্তবায়ন করে। Version 3.1-এর জন্য Saxon-এর মতো নির্দিষ্ট ইঞ্জিন প্রয়োজন।
নির্দিষ্ট অ্যাট্রিবিউট মান সহ নোড কিভাবে নির্বাচন করব?
অ্যাট্রিবিউট অক্ষের জন্য @ সংক্ষেপের সাথে একটি প্রেডিকেট ব্যবহার করুন। উদাহরণস্বরূপ, //book[@category="fiction"] সব book উপাদান নির্বাচন করে যেখানে category অ্যাট্রিবিউটের মান "fiction"। আপনি একাধিক প্রেডিকেট একত্রিত করতে পারেন: //book[@category="fiction"][@year > 2000]।
XML-এ মিলে যাওয়া উপাদান থাকলেও আমার XPath কেন কোনো ফলাফল দেয় না?
সবচেয়ে সাধারণ কারণ হলো XML নেমস্পেস। আপনার XML যদি একটি ডিফল্ট নেমস্পেস ঘোষণা করে (xmlns="..."), তাহলে উপাদানগুলো প্রিফিক্স ছাড়াও সেই নেমস্পেসের অন্তর্গত। Version 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 traversal-এর জন্য অপ্টিমাইজ করা। XPath অনেক বেশি শক্তিশালী: এটি parent traversal, sibling অক্ষ, সংখ্যাসূচক প্রেডিকেট এবং বিল্ট-ইন ফাংশন সাপোর্ট করে যা CSS সিলেক্টরে সম্ভব না। HTML-এর জন্য, CSS সিলেক্টর (querySelector) সাধারণত দ্রুততর। XML-এর জন্য, অধিকাংশ সার্ভার-সাইড লাইব্রেরি শুধু XPath সাপোর্ট করে — CSS সিলেক্টর সেখানে কোনো অপশনই না।