XML Namespace একটি গুরুত্বপূর্ণ ধারণা যা XML ডকুমেন্টে নামের সংঘর্ষ (name collision) থেকে রক্ষা করতে সাহায্য করে। এটি XML ডকুমেন্টের মধ্যে বিভিন্ন এলিমেন্ট এবং অ্যাট্রিবিউটের নামকে আলাদা করে, বিশেষ করে যখন একাধিক XML ডকুমেন্ট বা XML ভ্যালিডেশন স্কিমা একত্রে ব্যবহৃত হয়। Namespace এক বা একাধিক প্রিফিক্স (prefix) এবং URI (Uniform Resource Identifier) এর মাধ্যমে নির্ধারিত হয়।
Java তে XML Namespace ব্যবহারের জন্য বেশ কয়েকটি পদ্ধতি রয়েছে, এবং JAXP (Java API for XML Processing) লাইব্রেরি ব্যবহার করে এটি সহজেই প্রয়োগ করা যায়।
XML Namespace একটি URI বা Uniform Resource Identifier দ্বারা নির্ধারিত হয়, যা XML ডকুমেন্টের মধ্যে একাধিক এলিমেন্ট বা অ্যাট্রিবিউটের নামকে স্পষ্টভাবে আলাদা করতে ব্যবহৃত হয়। Namespace একটি প্রিফিক্সের মাধ্যমে একটি এলিমেন্ট বা অ্যাট্রিবিউটের নামের সাথে যুক্ত করা হয়।
Namespace এর মাধ্যমে আমরা বিভিন্ন XML স্কিমার মধ্যে নামের সংঘর্ষ এড়াতে পারি। Namespace ব্যবহার করা হয় যখন একটি XML ডকুমেন্টে একাধিক XML স্কিমার ব্যবহার করা হয়, যা একই নামের এলিমেন্ট বা অ্যাট্রিবিউট থাকতে পারে।
XML Namespace সাধারণত একটি URI এবং প্রিফিক্স দিয়ে গঠিত হয়।
<book xmlns:fiction="http://example.com/fiction">
<fiction:title>Java Programming</fiction:title>
</book>
এখানে, xmlns:fiction="http://example.com/fiction"
হল একটি XML Namespace যেখানে fiction
একটি প্রিফিক্স এবং http://example.com/fiction
একটি URI।
<?xml version="1.0" encoding="UTF-8"?>
<library xmlns:fiction="http://example.com/fiction"
xmlns:nonfiction="http://example.com/nonfiction">
<fiction:book>
<fiction:title>Java Programming</fiction:title>
<fiction:author>John Doe</fiction:author>
</fiction:book>
<nonfiction:book>
<nonfiction:title>History of Java</nonfiction:title>
<nonfiction:author>Jane Smith</nonfiction:author>
</nonfiction:book>
</library>
এখানে দুটি Namespace ব্যবহৃত হয়েছে:
fiction
প্রিফিক্স http://example.com/fiction
URI এর জন্য।nonfiction
প্রিফিক্স http://example.com/nonfiction
URI এর জন্য।import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.w3c.dom.NodeList;
import java.io.File;
public class XMLNamespaceExample {
public static void main(String[] args) {
try {
// XML ডকুমেন্ট লোড করার জন্য DocumentBuilderFactory
DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
factory.setNamespaceAware(true); // NamespaceAware সেট করা জরুরি
DocumentBuilder builder = factory.newDocumentBuilder();
// XML ডকুমেন্ট লোড করা
File xmlFile = new File("path/to/library.xml");
Document doc = builder.parse(xmlFile);
// Fiction বই খোঁজা
NodeList fictionBooks = doc.getElementsByTagNameNS("http://example.com/fiction", "book");
for (int i = 0; i < fictionBooks.getLength(); i++) {
Element book = (Element) fictionBooks.item(i);
System.out.println("Fiction Book Title: " + book.getElementsByTagNameNS("http://example.com/fiction", "title").item(0).getTextContent());
}
// Non-Fiction বই খোঁজা
NodeList nonfictionBooks = doc.getElementsByTagNameNS("http://example.com/nonfiction", "book");
for (int i = 0; i < nonfictionBooks.getLength(); i++) {
Element book = (Element) nonfictionBooks.item(i);
System.out.println("Non-Fiction Book Title: " + book.getElementsByTagNameNS("http://example.com/nonfiction", "title").item(0).getTextContent());
}
} catch (Exception e) {
e.printStackTrace();
}
}
}
fiction
প্রিফিক্স এবং আরেকটি nonfiction
প্রিফিক্স।fiction:book
এবং nonfiction:book
নামের মাধ্যমে আমরা দুটি আলাদা এলিমেন্টের নাম নির্ধারণ করেছি।DocumentBuilderFactory
এর মাধ্যমে XML ডকুমেন্ট লোড করা হয় এবং setNamespaceAware(true)
দিয়ে এটিকে Namespace সমর্থনকারী করে তোলা হয়।getElementsByTagNameNS
মেথডের মাধ্যমে XML ডকুমেন্টের Namespace নির্ধারণ করে নির্দিষ্ট এলিমেন্টগুলো বের করা হয়।Java তে XML Namespace একটি গুরুত্বপূর্ণ কনসেপ্ট যা XML ডকুমেন্টের গঠন এবং নাম স্পষ্ট করতে সাহায্য করে। JAXP এর মাধ্যমে Java তে XML Namespace ব্যবহারের মাধ্যমে নামের সংঘর্ষ এবং গঠনগত সমস্যা সমাধান করা সম্ভব।
XML Namespace হলো একটি কৌশল যা XML ডকুমেন্টে নাম সংঘর্ষ (name collision) এড়ানোর জন্য ব্যবহৃত হয়। যখন একটি XML ডকুমেন্টে একাধিক উপাদান (elements) বা অ্যাট্রিবিউট (attributes) একই নাম দিয়ে থাকে, তখন XML Namespace এর মাধ্যমে প্রতিটি উপাদান বা অ্যাট্রিবিউটের পরিচিতি নির্ধারণ করা হয়। এটি বিশেষত গুরুত্বপূর্ণ হয় যখন বিভিন্ন সোর্স থেকে XML ডেটা মিশ্রিত করা হয়।
XML Namespace সাধারণত একটি URI (Uniform Resource Identifier) দ্বারা চিহ্নিত হয়। এই URI সাধারণত একটি URL হতে পারে, তবে এটি প্রকৃত ওয়েব ঠিকানা না-ও হতে পারে। একটি XML ডকুমেন্টে namespace ব্যবহারের জন্য xmlns
অ্যাট্রিবিউট ব্যবহার করা হয়।
ধরা যাক, আমাদের একটি XML ডকুমেন্টে দুটি বিভিন্ন XML স্কিমা মিশ্রিত করা হচ্ছে - একটি bookstore
স্কিমা এবং একটি magazine
স্কিমা। যদি দুটি স্কিমাতেই title
নামের একটি উপাদান থাকে, তবে namespace ব্যবহার না করলে নাম সংঘর্ষ হতে পারে। এটি কিভাবে namespace দিয়ে সমাধান করা যায়, তা দেখানো হলো:
<bookstore>
<book>
<title>Learn Java</title>
<author>John Doe</author>
</book>
</bookstore>
<magazine>
<title>Tech Today</title>
<publisher>Tech Publishing</publisher>
</magazine>
এখানে title
নামের উপাদান দুটি আলাদা স্কিমা (bookstore এবং magazine) এর অংশ হলেও একই নাম ব্যবহার করা হয়েছে, যার ফলে নাম সংঘর্ষ হতে পারে।
<bookstore xmlns:bk="http://www.example.com/bookstore">
<bk:book>
<bk:title>Learn Java</bk:title>
<bk:author>John Doe</bk:author>
</bk:book>
</bookstore>
<magazine xmlns:mg="http://www.example.com/magazine">
<mg:title>Tech Today</mg:title>
<mg:publisher>Tech Publishing</mg:publisher>
</magazine>
এখানে:
xmlns:bk="http://www.example.com/bookstore"
এবং xmlns:mg="http://www.example.com/magazine"
namespace দিয়ে bookstore
এবং magazine
স্কিমাকে আলাদা করা হয়েছে।bk:title
এবং mg:title
নামের উপাদানগুলি আলাদা namespace ব্যবহার করে পরিচিত করা হয়েছে, যা নাম সংঘর্ষকে প্রতিরোধ করেছে।ডিফাইনিং Namespace: namespace ডিফাইন করার জন্য xmlns
অ্যাট্রিবিউট ব্যবহার করা হয়, এবং এটিকে সাধারণত রুট উপাদানের মধ্যে যুক্ত করা হয়।
<element xmlns:prefix="URI">
<!-- Elements with the prefix -->
</element>
Prefix ব্যবহার: namespace এ একটি prefix
(যেমন bk
, mg
, ইত্যাদি) ব্যবহৃত হয়, যা namespace URI-কে শর্টকাট হিসেবে ব্যবহার করতে সাহায্য করে। উপাদান বা অ্যাট্রিবিউটের নামের আগে এই prefix যোগ করা হয়।
<bk:book xmlns:bk="http://www.example.com/bookstore">
<bk:title>Learn Java</bk:title>
</bk:book>
Java তে XML namespace validate করার জন্য JAXP বা DOM Parser ব্যবহার করা হয়। যখন XML ডকুমেন্টটি কোনো নির্দিষ্ট namespace অনুসরণ করে, তখন Java কোডে সেটি যাচাই করা যায়।
উদাহরণ:
import javax.xml.parsers.*;
import org.w3c.dom.*;
import java.io.*;
public class XMLNamespaceExample {
public static void main(String[] args) throws Exception {
File xmlFile = new File("sample.xml");
DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
factory.setNamespaceAware(true); // Enable namespace awareness
DocumentBuilder builder = factory.newDocumentBuilder();
Document document = builder.parse(xmlFile);
// Get the root element and its namespace
Element rootElement = document.getDocumentElement();
System.out.println("Root Element Namespace: " + rootElement.getNamespaceURI());
}
}
এখানে setNamespaceAware(true)
ব্যবহার করে namespace সমর্থন সক্রিয় করা হয়েছে, যা XML ডকুমেন্টে namespace সঠিকভাবে প্রসেস করতে সাহায্য করে।
XML Namespace হল একটি শক্তিশালী বৈশিষ্ট্য যা XML ডকুমেন্টে নাম সংঘর্ষ এড়ানোর জন্য ব্যবহৃত হয়। এটি একাধিক XML স্কিমা বা সোর্স থেকে ডেটা মিশ্রিত করার ক্ষেত্রে খুবই গুরুত্বপূর্ণ। XML Namespace এর মাধ্যমে ডেটা এবং উপাদানগুলোর সঠিক পরিচিতি এবং পার্থক্য তৈরি করা যায়।
XML Namespace হল XML ডকুমেন্টে একটি বিশেষ কৌশল যা বিভিন্ন XML উপাদান এবং অ্যাট্রিবিউটকে নামগতভাবে আলাদা করতে ব্যবহৃত হয়। এটি একাধিক XML স্কিমা বা ডেটা সূত্র একত্রিত করার সময় একটি ডকুমেন্টে নামের সংঘর্ষ (name collision) এড়াতে সাহায্য করে। Java-তে XML ডেটা ম্যানেজমেন্টের জন্য XML namespace ব্যবহার করা একটি গুরুত্বপূর্ণ বিষয়, বিশেষত যখন XML ডকুমেন্টে একাধিক স্কিমা বা ডেটা উৎসের উপাদান মিশ্রিত থাকে।
XML Namespace হল একটি ইউআরএল বা ইউনিক আইডেন্টিফায়ার যা XML ডকুমেন্টের মধ্যে উপাদান এবং অ্যাট্রিবিউটকে শনাক্ত করতে ব্যবহৃত হয়। এটি XML ডকুমেন্টের উপাদান এবং অ্যাট্রিবিউটের নামগুলিকে একে অপর থেকে আলাদা করে, যা বিশেষত যখন একাধিক XML স্কিমা বা ডেটা উৎস ব্যবহার করা হয় তখন দরকারি।
XML namespace সাধারনত একটি প্রিফিক্স এবং একটি URI দ্বারা সংজ্ঞায়িত হয়। উদাহরণস্বরূপ:
<ns1:book xmlns:ns1="http://example.com/ns1">
<ns1:title>Learning Java</ns1:title>
<ns1:author>John Doe</ns1:author>
</ns1:book>
এখানে:
xmlns:ns1="http://example.com/ns1"
একটি namespace ঘোষণা করছে এবং ns1
একটি প্রিফিক্স হিসেবে ব্যবহার হচ্ছে।ns1:book
, ns1:title
, এবং ns1:author
এগুলি ns1
নামস্থান সম্পর্কিত উপাদান।Java-তে XML ডকুমেন্টে namespace ব্যবহার করতে হলে JAXP (Java API for XML Processing) বা JAXB (Java Architecture for XML Binding) এর মতো লাইব্রেরি ব্যবহার করা হয়। নিচে কিছু উদাহরণ দেওয়া হলো কিভাবে Java-তে XML namespace ব্যবহার করা যায়।
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import org.w3c.dom.Document;
import org.w3c.dom.NodeList;
public class XMLNamespaceExample {
public static void main(String[] args) throws Exception {
// XML ডকুমেন্ট লোড করুন
DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
factory.setNamespaceAware(true); // Namespace-aware করতে হবে
DocumentBuilder builder = factory.newDocumentBuilder();
Document doc = builder.parse("books.xml");
// Namespace সহ XPath ব্যবহার করে কুইরি করুন
NodeList nodeList = doc.getElementsByTagNameNS("http://example.com/ns1", "title");
// ফলাফল প্রদর্শন করুন
for (int i = 0; i < nodeList.getLength(); i++) {
System.out.println(nodeList.item(i).getTextContent());
}
}
}
এখানে setNamespaceAware(true)
দ্বারা Java ডকুমেন্টকে namespace-aware করা হচ্ছে, যাতে namespace-এর সাথে সম্পর্কিত উপাদানগুলি সঠিকভাবে প্রোসেস করা যায়।
JAXB ব্যবহার করে XML ডকুমেন্টে namespace প্রয়োগ করা সহজ। JAXB XML ডেটাকে Java অবজেক্টে এবং Java অবজেক্টকে XML ডকুমেন্টে রূপান্তর করতে সহায়তা করে।
import javax.xml.bind.JAXBContext;
import javax.xml.bind.JAXBException;
import javax.xml.bind.Marshaller;
import javax.xml.bind.annotation.XmlElement;
import javax.xml.bind.annotation.XmlNamespace;
@XmlNamespace(namespace = "http://example.com/ns1")
public class Book {
private String title;
private String author;
@XmlElement(namespace = "http://example.com/ns1")
public String getTitle() {
return title;
}
public void setTitle(String title) {
this.title = title;
}
@XmlElement(namespace = "http://example.com/ns1")
public String getAuthor() {
return author;
}
public void setAuthor(String author) {
this.author = author;
}
public static void main(String[] args) throws JAXBException {
Book book = new Book();
book.setTitle("Learning Java");
book.setAuthor("John Doe");
JAXBContext context = JAXBContext.newInstance(Book.class);
Marshaller marshaller = context.createMarshaller();
marshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, Boolean.TRUE);
marshaller.marshal(book, System.out);
}
}
এখানে:
@XmlElement(namespace = "http://example.com/ns1")
দিয়ে উপাদানগুলোর জন্য namespace নির্ধারণ করা হয়েছে।Book
অবজেক্টকে XML ডকুমেন্টে রূপান্তরিত করা হচ্ছে।XML Namespace ডেটা ম্যানেজমেন্টের জন্য বিশেষভাবে উপকারী যখন আপনি একাধিক XML সোর্স বা স্কিমা একত্রিত করেন। উদাহরণস্বরূপ:
XML Namespace ব্যবহার করে আপনি XML ডকুমেন্টের ডেটা ম্যানেজমেন্টকে আরও সুসংগঠিত এবং সুশৃঙ্খল করতে পারেন। Java-তে XML namespace ব্যবহারের মাধ্যমে ডেটার নাম সংক্রান্ত সংঘর্ষ এড়ানো যায় এবং একাধিক XML স্কিমা বা ডেটা উৎসের মধ্যে সঠিক সম্পর্ক প্রতিষ্ঠা করা সম্ভব হয়। JAXP, JAXB এবং অন্যান্য Java XML প্রযুক্তি এই namespace ব্যবহার করার জন্য প্রয়োজনীয় টুলস প্রদান করে।
XML নেমস্পেস (Namespace) হলো একটি উপায় যা XML ডকুমেন্টের মধ্যে একাধিক এলিমেন্ট এবং অ্যাট্রিবিউটের নামগুলিকে ইউনিক (অদ্বিতীয়) করতে সাহায্য করে, যাতে একই নামের বিভিন্ন এলিমেন্ট বা অ্যাট্রিবিউট আলাদা করা যায়। নেমস্পেসের মাধ্যমে বিভিন্ন XML ডকুমেন্টের মধ্যে একই নাম ব্যবহার করেও তাদের পার্থক্য করা যায়।
নেমস্পেসের ঘোষণা XML ডকুমেন্টের উপরে বা কোনও উপাদানের মধ্যে করা যায়। এটি সাধারণত একটি URI (Uniform Resource Identifier) দিয়ে নির্ধারিত হয়।
নেমস্পেস ডিক্লেয়ার করতে xmlns
অ্যাট্রিবিউট ব্যবহার করা হয়। এটি উপাদানটির মধ্যে বা ডকুমেন্টের মূল স্তরে স্থাপন করা যেতে পারে।
নিচে একটি XML ডকুমেন্টের উদাহরণ দেওয়া হলো, যেখানে রুট এলিমেন্টে নেমস্পেস ঘোষণা করা হয়েছে:
<bookstore xmlns="http://www.example.com/bookstore">
<book>
<title>Java Programming</title>
<author>John Doe</author>
<price>29.99</price>
</book>
<book>
<title>Python Programming</title>
<author>Jane Doe</author>
<price>19.99</price>
</book>
</bookstore>
এখানে xmlns="http://www.example.com/bookstore"
দ্বারা bookstore
এলিমেন্ট এবং তার মধ্যে থাকা সব উপাদানগুলির জন্য একটি নেমস্পেস নির্ধারিত হয়েছে।
এখানে বিভিন্ন উপাদানের জন্য আলাদা নেমস্পেস ঘোষণা করা হয়েছে:
<bookstore xmlns:fiction="http://www.example.com/fiction" xmlns:nonfiction="http://www.example.com/nonfiction">
<fiction:book>
<fiction:title>Java Programming</fiction:title>
<fiction:author>John Doe</fiction:author>
<fiction:price>29.99</fiction:price>
</fiction:book>
<nonfiction:book>
<nonfiction:title>Python Programming</nonfiction:title>
<nonfiction:author>Jane Doe</nonfiction:author>
<nonfiction:price>19.99</nonfiction:price>
</nonfiction:book>
</bookstore>
এখানে, fiction
এবং nonfiction
নামের দুটি আলাদা নেমস্পেস ব্যবহার করা হয়েছে, যেখানে fiction
নেমস্পেস http://www.example.com/fiction
এবং nonfiction
নেমস্পেস http://www.example.com/nonfiction
এর মাধ্যমে নির্দেশ করা হয়েছে। এইভাবে, একই নামের book
, title
, author
, এবং price
উপাদানগুলিকে আলাদা করা হয়েছে।
fiction
, nonfiction
) ব্যবহার করা যেতে পারে, যা ঐ নেমস্পেসের ভেতরের উপাদানগুলোকে চিহ্নিত করতে সাহায্য করে।Java-তে XML পার্সিং করার সময়, সাধারণত JAXP
(Java API for XML Processing) ব্যবহার করা হয়। JAXP এর মাধ্যমে XML ডকুমেন্ট থেকে নেমস্পেস ডিক্লেয়ারেশন এবং উপাদান নির্বাচন করা যায়।
নেমস্পেস ব্যবহারের মাধ্যমে XML ডকুমেন্টের স্ট্রাকচার আরও সুষ্ঠু, পরিষ্কার এবং সুসংগঠিত হয়, যা অনেক বড় এবং জটিল ডেটা সেটের ক্ষেত্রে খুবই কার্যকর।
XML Namespace হল একটি প্রযুক্তি যা XML ডকুমেন্টের উপাদান এবং অ্যাট্রিবিউটগুলিকে একে অপরের থেকে আলাদা করার জন্য ব্যবহৃত হয়, যাতে একাধিক ডকুমেন্টের মধ্যে নামের সংঘর্ষ (name conflict) প্রতিরোধ করা যায়। XML Namespace সাধারণত একটি URI (Uniform Resource Identifier) দ্বারা চিহ্নিত করা হয় এবং এটি XML উপাদান বা অ্যাট্রিবিউটের সাথে যুক্ত থাকে।
XML Namespace এর সাহায্যে একই নামের একাধিক উপাদান বা অ্যাট্রিবিউট একই XML ডকুমেন্টে থাকলেও তারা একে অপরের সাথে মিলবে না। এটি বিশেষত গুরুত্বপূর্ণ যখন একাধিক সোর্স থেকে ডেটা একত্রিত করা হয়।
ধরা যাক, আমরা একটি XML ডকুমেন্ট তৈরি করতে চাই যেখানে দুটি পৃথক ধরনের ডেটা রয়েছে: একটি bookstore
এর তথ্য এবং অন্যটি library
এর তথ্য। যদি আমরা একই নামের উপাদান ব্যবহার করি (যেমন <book>
), তবে Namespace ব্যবহার করতে হবে যাতে প্রতিটি উপাদান পৃথকভাবে চিহ্নিত করা যায়।
<library xmlns:book="http://www.example.com/book" xmlns:lib="http://www.example.com/library">
<book:book>
<book:title>Java Programming</book:title>
<book:author>John Doe</book:author>
</book:book>
<lib:book>
<lib:title>Learning XML</lib:title>
<lib:author>Jane Doe</lib:author>
</lib:book>
</library>
এখানে:
xmlns:book="http://www.example.com/book"
: এটি book
নামে একটি Namespace নির্ধারণ করে।xmlns:lib="http://www.example.com/library"
: এটি lib
নামে একটি Namespace নির্ধারণ করে।<book:book>
এবং <lib:book>
এই দুটি উপাদান আলাদা Namespace এর অধীনে রয়েছে, যদিও তাদের নাম এক।Java তে XML Namespace ব্যবহার করার জন্য, JAXP লাইব্রেরি ব্যবহার করা হয়। নিচে একটি উদাহরণ দেওয়া হলো যেখানে Java তে XML ডকুমেন্টে Namespace ব্যবস্থাপনা করা হয়েছে।
ধরা যাক আমাদের কাছে নিচের মতো একটি XML ডকুমেন্ট আছে, যেখানে দুটি Namespace ব্যবহৃত হয়েছে:
<library xmlns:book="http://www.example.com/book" xmlns:lib="http://www.example.com/library">
<book:book>
<book:title>Java Programming</book:title>
<book:author>John Doe</book:author>
</book:book>
<lib:book>
<lib:title>Learning XML</lib:title>
<lib:author>Jane Doe</lib:author>
</lib:book>
</library>
এখন আমরা এই XML ডকুমেন্টটি Java ব্যবহার করে পার্স (parse) করব এবং book
এবং lib
Namespace থেকে ডেটা এক্সট্র্যাক্ট করব।
import javax.xml.parsers.*;
import org.w3c.dom.*;
import javax.xml.xpath.*;
public class NamespaceExample {
public static void main(String[] args) throws Exception {
// XML ডকুমেন্ট লোড করা
String xml = "<library xmlns:book=\"http://www.example.com/book\" xmlns:lib=\"http://www.example.com/library\">" +
"<book:book>" +
"<book:title>Java Programming</book:title>" +
"<book:author>John Doe</book:author>" +
"</book:book>" +
"<lib:book>" +
"<lib:title>Learning XML</lib:title>" +
"<lib:author>Jane Doe</lib:author>" +
"</lib:book>" +
"</library>";
// XML ডকুমেন্ট পার্স করা
DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
DocumentBuilder builder = factory.newDocumentBuilder();
InputSource inputSource = new InputSource(new java.io.StringReader(xml));
Document document = builder.parse(inputSource);
// XPathFactory এবং XPath অবজেক্ট তৈরি করা
XPathFactory xPathFactory = XPathFactory.newInstance();
XPath xpath = xPathFactory.newXPath();
// Namespace নির্ধারণ করা
NamespaceContext nsContext = new NamespaceContext() {
public String getNamespaceURI(String prefix) {
if ("book".equals(prefix)) {
return "http://www.example.com/book";
} else if ("lib".equals(prefix)) {
return "http://www.example.com/library";
}
return null;
}
public String getPrefix(String uri) {
return null; // আমরা শুধু URI থেকে Prefix ফিরিয়ে দেব
}
public Iterator getPrefixes(String uri) {
return null;
}
};
xpath.setNamespaceContext(nsContext);
// XPath এক্সপ্রেশন তৈরি করা এবং কার্যকর করা
XPathExpression expr = xpath.compile("//book:book/book:title");
NodeList nodeList = (NodeList) expr.evaluate(document, XPathConstants.NODESET);
// ফলস্বরূপ প্রিন্ট করা
System.out.println("Book Titles from 'book' namespace:");
for (int i = 0; i < nodeList.getLength(); i++) {
System.out.println(nodeList.item(i).getTextContent());
}
// অন্য Namespace থেকে তথ্য পাওয়া
expr = xpath.compile("//lib:book/lib:title");
nodeList = (NodeList) expr.evaluate(document, XPathConstants.NODESET);
System.out.println("Book Titles from 'lib' namespace:");
for (int i = 0; i < nodeList.getLength(); i++) {
System.out.println(nodeList.item(i).getTextContent());
}
}
}
NamespaceContext
ইন্টারফেস ব্যবহার করা হয়েছে যাতে XPath এক্সপ্রেশন কাজ করার সময় Namespace URI গুলি সঠিকভাবে চিহ্নিত করা যায়।book:book/book:title
এবং lib:book/lib:title
থেকে উপাদানগুলি বের করা হয়েছে।book
এবং lib
এর জন্য নির্দিষ্ট Namespace URI দেওয়া হয়েছে।Book Titles from 'book' namespace:
Java Programming
Book Titles from 'lib' namespace:
Learning XML
book
, lib
) নামকরণ করা হয়, যা Namespace URI এর সাথে সম্পর্কিত।এভাবে Java তে XML Namespace ব্যবহার করে XML ডেটা এক্সট্র্যাক্ট এবং ম্যানিপুলেট করা যায়।
Read more