আসলে জাভা বাক্সের বাইরে এক্সএমএলকে পার্স করার জন্য 4 টি পদ্ধতি সমর্থন করে:
ডোম পার্সার / বিল্ডার: পুরো এক্সএমএল কাঠামো মেমরিতে লোড হয়ে গেছে এবং এটির সাথে কাজ করার জন্য আপনি সুপরিচিত ডিওএম পদ্ধতিগুলি ব্যবহার করতে পারেন। ডোম আপনাকে এক্সস্ল্ট ট্রান্সফর্মেশন সহ নথিতে লেখার অনুমতি দেয়। উদাহরণ:
public static void parse() throws ParserConfigurationException, IOException, SAXException {
DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
factory.setValidating(true);
factory.setIgnoringElementContentWhitespace(true);
DocumentBuilder builder = factory.newDocumentBuilder();
File file = new File("test.xml");
Document doc = builder.parse(file);
// Do something with the document here.
}
স্যাক্স পার্সার: এক্সএমএল ডকুমেন্টটি পড়ার জন্য সম্পূর্ণভাবে। স্যাক্স পার্সারটি দস্তাবেজটির মাধ্যমে চলে এবং ব্যবহারকারীর কলব্যাক পদ্ধতিগুলি কল করে। কোনও নথির শুরু / শেষের পদ্ধতি, উপাদান ইত্যাদি রয়েছে। এগুলি org.xML.sax.ContentHandler এ সংজ্ঞায়িত করা হয়েছে এবং ডিফল্টহ্যান্ডলার একটি খালি সহায়ক শ্রেণি রয়েছে।
public static void parse() throws ParserConfigurationException, SAXException {
SAXParserFactory factory = SAXParserFactory.newInstance();
factory.setValidating(true);
SAXParser saxParser = factory.newSAXParser();
File file = new File("test.xml");
saxParser.parse(file, new ElementHandler()); // specify handler
}
স্টাক্স রিডার / লেখক: এটি একটি ডাস্টাস্ট্রিম ওরিয়েন্টেড ইন্টারফেসের সাথে কাজ করে। প্রোগ্রামটি ঠিক যখন কার্সর / পুনরুক্তি করার মতো প্রস্তুত হয় তখন পরবর্তী উপাদানগুলির জন্য জিজ্ঞাসা করে। আপনি এটি দিয়ে নথিও তৈরি করতে পারেন। দস্তাবেজ পড়ুন:
public static void parse() throws XMLStreamException, IOException {
try (FileInputStream fis = new FileInputStream("test.xml")) {
XMLInputFactory xmlInFact = XMLInputFactory.newInstance();
XMLStreamReader reader = xmlInFact.createXMLStreamReader(fis);
while(reader.hasNext()) {
reader.next(); // do something here
}
}
}
দস্তাবেজ লিখুন:
public static void parse() throws XMLStreamException, IOException {
try (FileOutputStream fos = new FileOutputStream("test.xml")){
XMLOutputFactory xmlOutFact = XMLOutputFactory.newInstance();
XMLStreamWriter writer = xmlOutFact.createXMLStreamWriter(fos);
writer.writeStartDocument();
writer.writeStartElement("test");
// write stuff
writer.writeEndElement();
}
}
জ্যাকসবি: এক্সএমএল ডকুমেন্টগুলি পড়ার জন্য সর্বশেষতম বাস্তবায়ন: ভি 2 তে জাভা 6 এর অংশ। এটি আমাদের কোনও নথি থেকে জাভা অবজেক্টকে সিরিয়ালাইজ করতে দেয়। আপনি javax.xML.bind.Unmarshaller (আপনি JAXBContext.newInstance থেকে এর জন্য একটি ক্লাস পাবেন) এমন একটি শ্রেণীর সাথে দস্তাবেজটি পড়েন। প্রসঙ্গটি ব্যবহৃত ক্লাসগুলির সাথে শুরু করতে হবে, তবে আপনাকে কেবল মূল শ্রেণি নির্দিষ্ট করতে হবে এবং স্থির রেফারেন্সযুক্ত ক্লাসগুলি নিয়ে চিন্তা করতে হবে না। কোন ক্লাসটি উপাদান হতে হবে তা নির্দিষ্ট করতে আপনি টীকাগুলি ব্যবহার করেন (@ এক্সএমএল রুটএলিমেন্ট) এবং কোন ক্ষেত্রগুলি উপাদান (@ এক্সএমএল উপাদান) বা বৈশিষ্ট্যগুলি (@ এক্সএমএল লেখুন, কী আশ্চর্য!)
public static void parse() throws JAXBException, IOException {
try (FileInputStream adrFile = new FileInputStream("test")) {
JAXBContext ctx = JAXBContext.newInstance(RootElementClass.class);
Unmarshaller um = ctx.createUnmarshaller();
RootElementClass rootElement = (RootElementClass) um.unmarshal(adrFile);
}
}
দস্তাবেজ লিখুন:
public static void parse(RootElementClass out) throws IOException, JAXBException {
try (FileOutputStream adrFile = new FileOutputStream("test.xml")) {
JAXBContext ctx = JAXBContext.newInstance(RootElementClass.class);
Marshaller ma = ctx.createMarshaller();
ma.marshal(out, adrFile);
}
}
উদাহরণস্বরূপ কিছু পুরানো বক্তৃতা স্লাইডগুলি থেকে নির্লজ্জভাবে অনুলিপি করা হয়েছে ;-)
সম্পাদনা করুন: "আমার কোন API ব্যবহার করা উচিত?" সম্পর্কে। ভাল এটি নির্ভর করে - আপনি দেখতে যেমন সমস্ত এপিআই এর ক্ষমতা একই থাকে না তবে এক্সএমএল ডকুমেন্টটি মানচিত্রের জন্য আপনি যে ক্লাসগুলি ব্যবহার করেন সেগুলির উপর যদি আপনার নিয়ন্ত্রণ থাকে তবে জ্যাকএক্সবি আমার ব্যক্তিগত প্রিয়, সত্যই মার্জিত এবং সহজ সমাধান (যদিও আমি এটির জন্য এটি ব্যবহার করি নি) সত্যিই বড় দলিল, এটি কিছুটা জটিল হতে পারে)। SAX খুব সহজেই ব্যবহার করা সহজ এবং যদি আপনার এটির ব্যবহার করার সত্যিকারের কোনও উপযুক্ত কারণ না থাকে তবে কেবলমাত্র ডম থেকে দূরে থাকুন - আমার মতে পুরাতন, আড়ম্বরপূর্ণ এপিআই। আমি মনে করি না যে কোনও আধুনিক তৃতীয় পক্ষের লাইব্রেরি রয়েছে যা বিশেষত দরকারী কিছু যা এসটিএল থেকে অনুপস্থিত এবং স্ট্যান্ডার্ড লাইব্রেরিতে অত্যন্ত পরীক্ষিত, নথিভুক্ত এবং স্থিতিশীল হওয়ার স্বাভাবিক সুবিধা রয়েছে।