বাংলায় অ্যান্ড্রয়েড সহায়িকা - Bangla Android Guide

XML পার্স করা

XML পার্স করার ধাপগুলো নিম্নোরূপ:

১. যেভাবে Analyze the Feed এ আলোচনা করা হয়েছে, আপনি আপনার অ্যাপে যে ট্যাগ অন্তর্ভূক্ত করতে চান তা চিহ্নিত করুন। এই উদাহরণ entrt ট্যাগের জন্য ডাটা তুলে আনতে এবং title, link,এবং summary ট্যাগে এগুলো রেখে দেয়।

২. নিম্নোক্ত পদ্ধতিগুলো তৈরী করুন:

  • যে ট্যাগগুলোর প্রতি আপনি আগ্রহী তার প্রতিটার জন্য একটি "read" পদ্ধতি। উদাহরণস্বরূপ, readEntry(), readTitle()এবং অন্যান্য। পার্সার ইনপুট স্ট্রিম থেকে ট্যাগ রিড করে। যখন এটা entry, title, link বা summary নামে একটি ট্যাগের মুখোমুখি হয়, এটা ঐ ট্যাগের জন্য উপযাগী পদ্ধতি কল করে। অন্যথায় এটা ট্যাগটিকে ছেড়ে দিয়ে চলে যায়।

  • প্রতিটা ভিন্ন ধরনের ট্যাগের জন্য ডাটা তুলে আনার জন্য এবং পার্সার কে পরবর্তী ট্যাগে এগিয়ে নিয়ে যাওয়ার জন্য পদ্ধতি তৈরী করা:

    • Title এবং Summary ট্যাগগুলোর জন্য পার্সার readText()কল করে। এই পদ্ধতি parser.getText()কল করার মাধ্যমে এই ট্যাগগুলোর জন্য ডাটা তুলে আনে।

    • link ট্যাগের জন্য, পার্সার লিংকের জন্য ডাটা তুলে আনে, প্রথমেই এটা নির্ধারণ করে নেয় যে লিংক টা সেই ধরনের যার প্রতি এটার আগ্রহ আছে। তারপর এটা লিংকের ভ্যালু নিয়ে আসতে parser.getAttributeValue()ব্যবহার করে।

    • entry tag ট্যাগের জন্য, পার্সারreadEntry()কল করে। এই পদ্ধতি এন্ট্রির নেসটেড ট্যাগ পার্স করে এবং ডাটা মেম্বার title, link,এবং summary সহ একটি Entry অবজেক্ট ফেরত পাঠায়।

  • একটি হেল্পার (সহায়তাকারী) skip() পদ্ধতি যা রিকার্সিভ। এই বিষয়ে আলোচনার জন্য Skip Tags You Don't Care About দেখুন।

এই চিত্রটিতে দেখানো হচ্ছে কীভাবে পার্সার entries, titles, links, এবং summaries কে পার্স করে।

public static class Entry {
    public final String title;
    public final String link;
    public final String summary;

    private Entry(String title, String summary, String link) {
        this.title = title;
        this.summary = summary;
        this.link = link;
    }
}

// Parses the contents of an entry. If it encounters a title, summary, or link tag, hands them off
// to their respective "read" methods for processing. Otherwise, skips the tag.
private Entry readEntry(XmlPullParser parser) throws XmlPullParserException, IOException {
    parser.require(XmlPullParser.START_TAG, ns, "entry");
    String title = null;
    String summary = null;
    String link = null;
    while (parser.next() != XmlPullParser.END_TAG) {
        if (parser.getEventType() != XmlPullParser.START_TAG) {
            continue;
        }
        String name = parser.getName();
        if (name.equals("title")) {
            title = readTitle(parser);
        } else if (name.equals("summary")) {
            summary = readSummary(parser);
        } else if (name.equals("link")) {
            link = readLink(parser);
        } else {
            skip(parser);
        }
    }
    return new Entry(title, summary, link);
}

// Processes title tags in the feed.
private String readTitle(XmlPullParser parser) throws IOException, XmlPullParserException {
    parser.require(XmlPullParser.START_TAG, ns, "title");
    String title = readText(parser);
    parser.require(XmlPullParser.END_TAG, ns, "title");
    return title;
}

// Processes link tags in the feed.
private String readLink(XmlPullParser parser) throws IOException, XmlPullParserException {
    String link = "";
    parser.require(XmlPullParser.START_TAG, ns, "link");
    String tag = parser.getName();
    String relType = parser.getAttributeValue(null, "rel");
    if (tag.equals("link")) {
        if (relType.equals("alternate")){
            link = parser.getAttributeValue(null, "href");
            parser.nextTag();
        }
    }
    parser.require(XmlPullParser.END_TAG, ns, "link");
    return link;
}

// Processes summary tags in the feed.
private String readSummary(XmlPullParser parser) throws IOException, XmlPullParserException {
    parser.require(XmlPullParser.START_TAG, ns, "summary");
    String summary = readText(parser);
    parser.require(XmlPullParser.END_TAG, ns, "summary");
    return summary;
}

// For the tags title and summary, extracts their text values.
private String readText(XmlPullParser parser) throws IOException, XmlPullParserException {
    String result = "";
    if (parser.next() == XmlPullParser.TEXT) {
        result = parser.getText();
        parser.nextTag();
    }
    return result;
}
  ...
}