JavaRush /جاوا بلاگ /Random-SD /جاوا پروگرامر لاءِ XML بنياديات - حصو 3.1 جو 3 - SAX
Ярослав
سطح
Днепр

جاوا پروگرامر لاءِ XML بنياديات - حصو 3.1 جو 3 - SAX

گروپ ۾ شايع ٿيل
تعارف منهنجي آخري مضمون جي سڀني پڙهندڙن کي هيلو، ۽ مان توهان کي مبارڪباد ڏيڻ چاهيان ٿو: XML بابت پيچيده شيون اسان جي پويان آهن. هي آرٽيڪل جاوا ۾ ڪوڊ تي مشتمل هوندو. اتي ٿورو نظريو ٿيندو، ۽ پوء مشق. انهي حقيقت جي ڪري ته SAX تي مواد جو هڪ ٽڪرو لفظ ۾ 10 صفحا ڀريو، مون محسوس ڪيو ته مان حدن ۾ نه ٿو اچي سگهان. تنهن ڪري، آرٽيڪل 3 کي 3 الڳ مضمونن ۾ ورهايو ويندو، ڪابه ڳالهه اها ڪيتري به عجيب لڳي. هر شي هن ترتيب ۾ هوندي: SAX -> DOM -> JAXB. هي آرٽيڪل صرف SAX تي ڌيان ڏيندو. پي ايس ڪورس ۾ ڪٿي به هڪ ڪم هو جتي اهو ضروري هو ته سڀني اندروني عناصر کي HTML فائل ۾ ڏيکاري. هن آرٽيڪل کان پوء، توهان اهو ڪرڻ جي قابل هوندا بغير پڙهڻ کان سواء روايتي BufferedReader۽ پيچيده پروسيسنگ الگورتھم سان، ۽ پڻ ساڳيو حل آخري عملي مثال ۾ ڏنو ويندو. اچو ته شروع ڪريون :) SAX (Simple API for XML) - THEORY SAX هينڊلر اهڙي طرح ٺاهيو ويو آهي ته اهو صرف XML فائلن کي ترتيب سان پڙهي ٿو ۽ مختلف واقعن تي رد عمل ظاهر ڪري ٿو، جنهن کان پوءِ اهو معلومات هڪ خاص ايونٽ هينڊلر ڏانهن منتقل ڪري ٿو. ان ۾ ڪافي ڪجھ واقعا آھن، پر سڀ کان وڌيڪ بار بار ۽ مفيد ھيٺيان آھن:
  1. startDocument- دستاويز جي شروعات
  2. endDocument- دستاويز جي پڇاڙي
  3. startElement- هڪ عنصر کولڻ
  4. endElement- هڪ عنصر کي بند ڪرڻ
  5. characters- متن جي معلومات اندر عناصر.
سڀ واقعا هڪ ايونٽ هينڊلر ۾ پروسيس ڪيا ويندا آهن ، جنهن کي ٺاهيو وڃي ۽ طريقن کي ختم ڪيو وڃي . فائدا: ڊيٽا پڙهڻ جي "سڌي" طريقي جي ڪري اعلي ڪارڪردگي، گھٽ ياداشت جي قيمت. نقصانات: محدود ڪارڪردگي، جنهن جو مطلب آهي ته غير لڪير مسئلن ۾ اسان کي ان کي بهتر ڪرڻو پوندو. SAX (XML لاءِ سادي API) - عمل ڪريو فوري طور تي درآمد جي هڪ فهرست ته جيئن توهان ڪنهن به شيءِ کي ڳولهي ۽ پريشان نه ڪريو:
import org.xml.sax.Attributes;
import org.xml.sax.SAXException;
import org.xml.sax.helpers.DefaultHandler;

import javax.xml.parsers.ParserConfigurationException;
import javax.xml.parsers.SAXParser;
import javax.xml.parsers.SAXParserFactory;
هاڻي، پهرين، اسان کي هڪ SAXParser ٺاهڻ جي ضرورت آهي:
public class SAXExample {
    public static void main(String[] args) throws ParserConfigurationException, SAXException, IOException {
        // Creation фабрики и образца parserа
        SAXParserFactory factory = SAXParserFactory.newInstance();
        SAXParser parser = factory.newSAXParser();
    }
}
جئين توهان ڏسي سگهو ٿا، توهان کي پهريان هڪ ڪارخانو ٺاهڻ جي ضرورت آهي، ۽ پوء خود ڪارخاني ۾ پارسر ٺاهي. هاڻي ته اسان وٽ پاڻ کي پارسر آهي، اسان کي ان جي واقعن لاء هڪ سنڀاليندڙ جي ضرورت آهي. ان لاءِ اسان کي پنهنجي سهولت لاءِ هڪ الڳ ڪلاس جي ضرورت آهي:
public class SAXExample {
    public static void main(String[] args) throws ParserConfigurationException, SAXException, IOException {
        SAXParserFactory factory = SAXParserFactory.newInstance();
        SAXParser parser = factory.newSAXParser();
    }

    private static class XMLHandler extends DefaultHandler {
        @Override
        public void startDocument() throws SAXException {
            // Тут будет логика реакции на начало documentа
        }

        @Override
        public void endDocument() throws SAXException {
            // Тут будет логика реакции на конец documentа
        }

        @Override
        public void startElement(String uri, String localName, String qName, Attributes attributes) throws SAXException {
            // Тут будет логика реакции на начало element
        }

        @Override
        public void endElement(String uri, String localName, String qName) throws SAXException {
            // Тут будет логика реакции на конец element
        }

        @Override
        public void characters(char[] ch, int start, int length) throws SAXException {
            // Тут будет логика реакции на текст между elementми
        }

        @Override
        public void ignorableWhitespace(char[] ch, int start, int length) throws SAXException {
            // Тут будет логика реакции на пустое пространство внутри элементов (пробелы, переносы строчек и так далее).
        }
    }
}
اسان سڀني طريقن سان ھڪڙو طبقو ٺاھيو آھي جيڪي اسان کي واقعن کي سنڀالڻ لاءِ گهربل آھن جيڪي نظريي ۾ درج ٿيل آھن. ٿورو وڌيڪ اضافي نظريو: ٿوري بابت characters: جيڪڏهن عنصر متن تي مشتمل آهي، مثال طور، " هيلو "، ته پوء، نظرياتي طور تي، طريقو هر فرد جي ڪردار لاء قطار ۾ 5 ڀيرا سڏي سگهجي ٿو، پر اهو هڪ وڏو معاملو ناهي، ڇو ته سڀ ڪجهه اڃا ڪم ڪندو. ۽ طريقن جي باري ۾ :startElementendElementuri - هي اها جاءِ آهي جنهن ۾ عنصر واقع آهي، localName- هي عنصر جو نالو آهي بغير ڪنهن اڳياڙي جي، qName- هي عنصر جو نالو آهي اڳياڙي سان (جيڪڏهن هڪ آهي، ٻي صورت ۾ صرف نالو. عنصر جي). uri۽ localNameهميشه خالي جيڪڏهن اسان فيڪٽري ۾ خلائي پروسيسنگ کي فعال نه ڪيو آهي. اهو ڪارخاني جو طريقو استعمال ڪندي ڪيو ويندو آهي setNamespaceAware(true). پوءِ اسان حاصل ڪري سگھون ٿا خلا ( uri) ۽ عنصرن سان انھن جي اڳيان اڳياڙين سان ( localName). ڪم #1 - اسان وٽ ھيٺ ڏنل XML آھي
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<company>
    <name>IT-Heaven</name>
    <offices>
        <office floor="1" room="1">
            <employees>
                <employee name="Maksim" job="Middle Software Developer" />
                <employee name="Ivan" job="Junior Software Developer" />
                <employee name="Franklin" job="Junior Software Developer" />
            </employees>
        </office>
        <office floor="1" room="2">
            <employees>
                <employee name="Herald" job="Middle Software Developer" />
                <employee name="Adam" job="Middle Software Developer" />
                <employee name="Leroy" job="Junior Software Developer" />
            </employees>
        </office>
    </offices>
</company>
اسان جو مقصد: هن فائل مان سڀني ملازمن بابت سموري معلومات حاصل ڪرڻ. پهريون، اسان کي هڪ ڪلاس ٺاهڻ جي ضرورت آهيEmployee:
public class Employee {
    private String name, job;

    public Employee(String name, String job) {
        this.name = name;
        this.job = job;
    }

    public String getName() {
        return name;
    }

    public String getJob() {
        return job;
    }
}
۽ اسان جي مکيه طبقي ۾ SAXExampleاسان کي سڀني ملازمن سان هڪ فهرست جي ضرورت آهي:
private static ArrayList<Employee> employees = new ArrayList<>();
ھاڻي اچو ته غور سان ڏسون ته XML فائل ۾ جيڪا معلومات گھربل آھي ان ۾ ڪٿي آھي. ۽، جيئن اسان ڏسي سگهون ٿا، سڀ معلومات جيڪا اسان کي گهربل آهي عناصر جي خاصيتون آهن employee. ۽ جيئن ته startElementاسان وٽ ھڪڙو مفيد پيٽرولر آھي attributes، پوء اسان وٽ ھڪڙو سادو ڪم آھي. پهرين، اچو ته غير ضروري طريقن کي هٽائي ڇڏيون ته جيئن اسان جي ڪوڊ کي خراب نه ٿئي. اسان کي صرف ضرورت آهي startElement. ۽ طريقو پاڻ ۾، اسان کي ملازم جي ٽيگ جي خاصيتن مان معلومات گڏ ڪرڻ گهرجي. ڌيان:
public class SAXExample {
    private static ArrayList<Employee> employees = new ArrayList<>();

    public static void main(String[] args) throws ParserConfigurationException, SAXException, IOException {
        SAXParserFactory factory = SAXParserFactory.newInstance();
        SAXParser parser = factory.newSAXParser();
    }

    private static class XMLHandler extends DefaultHandler {
        @Override
        public void startElement(String uri, String localName, String qName, Attributes attributes) throws SAXException {
            if (qName.equals("employee")) {
                String name = attributes.getValue("name");
                String job = attributes.getValue("job");
                employees.add(new Employee(name, job));
            }
        }
    }
}
منطق سادو آهي: جيڪڏهن هڪ عنصر جو نالو آهي employee، اسان صرف ان جي خاصيتن بابت معلومات حاصل ڪنداسين. اتي attributesھڪڙو مفيد طريقو آھي جتي، ھڪڙي خاصيت جي نالي کي ڄاڻڻ، توھان ان جي قيمت حاصل ڪري سگھو ٿا. اھو اھو آھي جيڪو اسان استعمال ڪيو. هاڻي ته اسان هڪ عنصر جي شروعات لاءِ هڪ ايونٽ هينڊلر ٺاهيو آهي، اسان کي پنهنجي XML فائل کي پارس ڪرڻ جي ضرورت آهي . هن کي ڪرڻ لاء، صرف هي ڪريو:
public class SAXExample {
    private static ArrayList<Employee> employees = new ArrayList<>();

    public static void main(String[] args) throws ParserConfigurationException, SAXException, IOException {
        SAXParserFactory factory = SAXParserFactory.newInstance();
        SAXParser parser = factory.newSAXParser();

        XMLHandler handler = new XMLHandler();
        parser.parse(new File("resource/xml_file1.xml"), handler);

        for (Employee employee : employees)
            System.out.println(String.format("Name сотрудника: %s, его должность: %s", employee.getName(), employee.getJob()));
    }

    private static class XMLHandler extends DefaultHandler {
        @Override
        public void startElement(String uri, String localName, String qName, Attributes attributes) throws SAXException {
            if (qName.equals("employee")) {
                String name = attributes.getValue("name");
                String job = attributes.getValue("job");
                employees.add(new Employee(name, job));
            }
        }
    }
}
پارس جي طريقي ۾ توهان کي xml فائل ڏانهن رستو پاس ڪرڻ گهرجي ۽ هينڊلر توهان ٺاهيو. ۽ ائين، هي ڪوڊ استعمال ڪندي اسان هن XML مان معلومات ڪڍيا:
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<company>
    <name>IT-Heaven</name>
    <offices>
        <office floor="1" room="1">
            <employees>
                <employee name="Maksim" job="Middle Software Developer" />
                <employee name="Ivan" job="Junior Software Developer" />
                <employee name="Franklin" job="Junior Software Developer" />
            </employees>
        </office>
        <office floor="1" room="2">
            <employees>
                <employee name="Herald" job="Middle Software Developer" />
                <employee name="Adam" job="Middle Software Developer" />
                <employee name="Leroy" job="Junior Software Developer" />
            </employees>
        </office>
    </offices>
</company>
۽ اسان کي هيٺين پيداوار ملي آهي:
Name сотрудника: Maksim, его должность: Middle Software Developer
Name сотрудника: Ivan, его должность: Junior Software Developer
Name сотрудника: Franklin, его должность: Junior Software Developer
Name сотрудника: Herald, его должность: Middle Software Developer
Name сотрудника: Adam, его должность: Middle Software Developer
Name сотрудника: Leroy, его должность: Junior Software Developer
مشن پورو ٿيو! ٽاسڪ #2 - اسان وٽ ھيٺ ڏنل XML آھي:
<?xml version="1.0" encoding="UTF-8"?>
<company>
    <name>IT-Heaven</name>
    <offices>
        <office floor="1" room="1">
            <employees>
                <employee>
                    <name>Maksim</name>
                    <job>Middle Software Developer</job>
                </employee>
                <employee>
                    <name>Ivan</name>
                    <job>Junior Software Developer</job>
                </employee>
                <employee>
                    <name>Franklin</name>
                    <job>Junior Software Developer</job>
                </employee>
            </employees>
        </office>
        <office floor="1" room="2">
            <employees>
                <employee>
                    <name>Herald</name>
                    <job>Middle Software Developer</job>
                </employee>
                <employee>
                    <name>Adam</name>
                    <job>Middle Software Developer</job>
                </employee>
                <employee>
                    <name>Leroy</name>
                    <job>Junior Software Developer</job>
                </employee>
            </employees>
        </office>
    </offices>
</company>
اسان جو مقصد: هن فائل مان سڀني ملازمن بابت سموري معلومات حاصل ڪرڻ. اهو مسئلو چڱيءَ طرح ڏيکاريندو ته ڪيئن هڪ خراب ترتيب واري XML فائل ڪوڊ لکڻ کي وڌيڪ ڏکيو بڻائي سگهي ٿي. جئين توهان ڏسي سگهو ٿا، نالو ۽ پوزيشن بابت معلومات هاڻي متن جي معلومات جي اندر اندر محفوظ ڪئي وئي آهي name۽ عناصر job. عناصر اندر متن پڙهڻ لاء، اسان وٽ اکر جو طريقو آهي. هن کي ڪرڻ لاء، اسان کي بهتر منطق سان هڪ نئين هينڊلر ڪلاس ٺاهڻ جي ضرورت آهي. اهو نه وساريو ته هينڊلر مڪمل قسم جا طبقا آهن جيڪي ڪنهن به پيچيدگي جي منطق کي محفوظ ڪرڻ جي قابل آهن. تنهن ڪري، هاڻي اسان اسان جي پروسيسر کي ترتيب ڏينداسين. حقيقت ۾، اهو نوٽ ڪرڻ ڪافي آهي ته اسان هميشه موڙ nameوٺون ٿا job، ۽ اهو فرق نٿو پوي ته ڪهڙي ترتيب ۾، اسان آساني سان نالو ۽ پيشو کي الڳ الڳ متغيرن ۾ محفوظ ڪري سگهون ٿا، ۽ جڏهن ٻئي متغير محفوظ ٿي وڃن، اسان جي ملازم کي ٺاهيو. صرف هتي، عنصر جي شروعات سان گڏ، اسان وٽ عنصر جي اندر متن لاء هڪ پيٽرولر نه آهي. اسان کي ٽيڪسٽ تي طريقا استعمال ڪرڻ گهرجن. پر جيڪڏهن اهي مڪمل طور تي مختلف طريقا آهن ته اسان هڪ عنصر اندر متن جي معلومات ڪيئن حاصل ڪري سگهون ٿا؟ منهنجو حل: اسان کي صرف آخري عنصر جو نالو ياد رکڻو پوندو، ۽ charactersچيڪ ڪريو ته ڪهڙي عنصر ۾ اسان معلومات پڙهي رهيا آهيون. توهان کي اهو به ياد رکڻ جي ضرورت آهي ته <codee>ڪردار سڀني اکرن کي عناصر جي اندر پڙهندا آهن، جنهن جو مطلب آهي ته سڀئي اسپيس ۽ حتي لائين برڪ پڙهيا ويندا. ۽ اسان کي ان جي ضرورت ناهي. اسان کي هن ڊيٽا کي نظر انداز ڪرڻ جي ضرورت آهي ڇو ته اهو غلط آهي. </codee> ڪوڊ:
public class SAXExample {
    private static ArrayList<Employee> employees = new ArrayList<>();

    public static void main(String[] args) throws ParserConfigurationException, SAXException, IOException {
        SAXParserFactory factory = SAXParserFactory.newInstance();
        SAXParser parser = factory.newSAXParser();

        AdvancedXMLHandler handler = new AdvancedXMLHandler();
        parser.parse(new File("resource/xml_file2.xml"), handler);

        for (Employee employee : employees)
            System.out.println(String.format("Name сотрудника: %s, его должность: %s", employee.getName(), employee.getJob()));
    }

    private static class AdvancedXMLHandler extends DefaultHandler {
        private String name, job, lastElementName;

        @Override
        public void startElement(String uri, String localName, String qName, Attributes attributes) throws SAXException {
            lastElementName = qName;
        }

        @Override
        public void characters(char[] ch, int start, int length) throws SAXException {
            String information = new String(ch, start, length);

            information = information.replace("\n", "").trim();

            if (!information.isEmpty()) {
                if (lastElementName.equals("name"))
                    name = information;
                if (lastElementName.equals("job"))
                    job = information;
            }
        }

        @Override
        public void endElement(String uri, String localName, String qName) throws SAXException {
            if ( (name != null && !name.isEmpty()) && (job != null && !job.isEmpty()) ) {
                employees.add(new Employee(name, job));
                name = null;
                job = null;
            }
        }
    }
}
جئين توهان ڏسي سگهو ٿا، XML فائل جي جوڙجڪ جي بنيادي پيچيدگي جي ڪري، اسان جو ڪوڊ خاص طور تي وڌيڪ پيچيده ٿي چڪو آهي. بهرحال، ڪوڊ پيچيده نه آهي. وضاحت: اسان ملازمن جي باري ۾ ڊيٽا کي ذخيرو ڪرڻ لاء متغير ٺاهيا ( name, job) ، انهي سان گڏ هڪ متغير lastElementNameرڪارڊ ڪرڻ لاء جيڪو عنصر اسان اندر آهيون. ان کان پوء، طريقي سان charactersاسان معلومات کي فلٽر ڪندا آهيون، ۽ جيڪڏهن اڃا تائين معلومات موجود آهي، ته پوء ان جو مطلب اهو آهي ته هي متن آهي جيڪو اسان جي ضرورت آهي، ۽ پوء اسان اهو طئي ڪيو ته اهو نالو آهي يا هڪ پيشو استعمال ڪندي lastElementName. طريقي ۾ endElement، اسان چيڪ ڪريون ٿا ته سڀ معلومات پڙهي وئي آهي، ۽ جيڪڏهن ائين آهي، اسان هڪ ملازم ٺاهي ۽ معلومات کي ري سيٽ ڪيو. حل جي پيداوار پهرين مثال جي برابر آهي:
Name сотрудника: Maksim, его должность: Middle Software Developer
Name сотрудника: Ivan, его должность: Junior Software Developer
Name сотрудника: Franklin, его должность: Junior Software Developer
Name сотрудника: Herald, его должность: Middle Software Developer
Name сотрудника: Adam, его должность: Middle Software Developer
Name сотрудника: Leroy, его должность: Junior Software Developer
اهڙيء طرح، اهو مسئلو حل ڪيو ويو آهي ، پر توهان نوٽيس ڪري سگهو ٿا ته پيچيدگي وڌيڪ آهي. تنهن ڪري، اسان اهو نتيجو ڪري سگھون ٿا ته متن جي معلومات کي ذخيرو ۾ محفوظ ڪرڻ اڪثر ڪري انفرادي عناصر جي ڀيٽ ۾ وڌيڪ صحيح هوندو. ۽ هڪ وڌيڪ مٺو ٽاسڪ جيڪو جزوي طور جاوا رش ۾ مسئلو حل ڪري ڇڏيندو HTML ۾ هڪ عنصر بابت معلومات ڏيکارڻ بابت، صرف ان کي ٿوري ايڊٽ ڪرڻ جي ضرورت پوندي، هتي اسان صرف هڪ عنصر جي اندر سڀني عنصرن کي لسٽ ڪنداسين :) ٽاسڪ نمبر 3 - ڏنو ويو عنصر عنصر، سڀني اندروني عناصر جا نالا ۽ خاصيتون ڏيکاريو؛ جيڪڏهن عنصر نه مليو، هن کي ڏيکاري. ھن ڪم لاءِ اسين ھيٺ ڏنل XML فائل استعمال ڪنداسين:
<?xml version="1.0" encoding="UTF-8"?>
<root>
    <oracle>
        <connection value="jdbc:oracle:thin:@10.220.140.48:1521:test1" />
        <user value="secretOracleUsername" />
        <password value="111" />
    </oracle>

    <mysql>
        <connection value="jdbc:mysql:thin:@10.220.140.48:1521:test1" />
        <user value="secretMySQLUsername" />
        <password value="222" />
    </mysql>
</root>
جئين توهان ڏسي سگهو ٿا، اسان وٽ هتي ٽي ممڪن منظرنامو آهن: root, mysql, oracle. پوء پروگرام اندر اندر سڀني عناصر جي باري ۾ سڀ معلومات ڏيکاريندو. اسان اهو ڪيئن ڪري سگهون ٿا؟ ۽ اهو بلڪل سادو آهي: اسان کي صرف هڪ منطقي متغير بيان ڪرڻ جي ضرورت آهي isEntered، جيڪو ظاهر ڪندو ته ڇا اسان کي عنصر جي اندر جي ضرورت آهي، ۽ جيڪڏهن اندر، سڀني ڊيٽا کي پڙهي startElement. حل ڪوڊ:
public class SAXExample {
    private static boolean isFound;

    public static void main(String[] args) throws ParserConfigurationException, SAXException, IOException {
        SAXParserFactory factory = SAXParserFactory.newInstance();
        SAXParser parser = factory.newSAXParser();

        SearchingXMLHandler handler = new SearchingXMLHandler("root");
        parser.parse(new File("resource/xml_file3.xml"), handler);

        if (!isFound)
            System.out.println("Элемент не был найден.");
    }

    private static class SearchingXMLHandler extends DefaultHandler {
        private String element;
        private boolean isEntered;

        public SearchingXMLHandler(String element) {
            this.element = element;
        }

        @Override
        public void startElement(String uri, String localName, String qName, Attributes attributes) throws SAXException {
            if (isEntered) {
                System.out.println(String.format("Найден элемент <%s>, его атрибуты:", qName));

                int length = attributes.getLength();
                for(int i = 0; i < length; i++)
                    System.out.println(String.format("Name атрибута: %s, его meaning: %s", attributes.getQName(i), attributes.getValue(i)));
            }

            if (qName.equals(element)) {
                isEntered = true;
                isFound = true;
            }
        }

        @Override
        public void endElement(String uri, String localName, String qName) throws SAXException {
            if (qName.equals(element))
                isEntered = false;
        }
    }
}
هن ڪوڊ ۾، جڏهن هڪ عنصر داخل ڪيو جنهن بابت اسان کي معلومات جي ضرورت آهي، اسان پرچم کي isEnteredصحيح طور تي سيٽ ڪيو، جنهن جو مطلب آهي ته اسان عنصر جي اندر آهيون. ۽ جيئن ئي اسان عنصر جي اندر آهيون، اسان صرف هر نئين عنصر کي پروسيس ڪريون ٿا startElement، اهو ڄاڻڻ ته اهو بلڪل اسان جي عنصر جو اندروني عنصر آهي. تنهنڪري اسان عنصر جو نالو ۽ ان جو عنوان ڪڍيون ٿا. جيڪڏهن عنصر فائل ۾ نه مليو هو، پوء اسان وٽ هڪ متغير آهي isFoundجيڪو سيٽ ڪيو ويندو آهي جڏهن عنصر مليو آهي، ۽ جيڪڏهن اهو غلط آهي، هڪ پيغام ڏيکاريو ويندو ته عنصر نه مليو هو. ۽ جيئن توهان ڏسي سگهو ٿا، مثال ۾ SearchingXMLHandlerاسان rootهڪ عنصر تعمير ڪندڙ کي منظور ڪيو. هن لاء نتيجو:
Найден элемент <oracle>, его атрибуты:
Найден элемент <connection>, его атрибуты:
Name атрибута: value, его meaning: jdbc:oracle:thin:@10.220.140.48:1521:test1
Найден элемент <user>, его атрибуты:
Name атрибута: value, его meaning: secretOracleUsername
Найден элемент <password>, его атрибуты:
Name атрибута: value, его meaning: 111
Найден элемент <mysql>, его атрибуты:
Найден элемент <connection>, его атрибуты:
Name атрибута: value, его meaning: jdbc:mysql:thin:@10.220.140.48:1521:test1
Найден элемент <user>, его атрибуты:
Name атрибута: value, его meaning: secretMySQLUsername
Найден элемент <password>, его атрибуты:
Name атрибута: value, его meaning: 222
اهڙيء طرح، اسان اندروني عناصر ۽ انهن جي خاصيتن جي باري ۾ سڀ معلومات حاصل ڪئي. مسئلو حل ٿي ويو آهي. <h2>Epilogue</h2>توهان ڏٺو آهي ته SAX هڪ دلچسپ اوزار آهي ۽ ڪافي اثرائتو آهي، ۽ اهو مختلف طريقن سان استعمال ڪري سگهجي ٿو، مختلف مقصدن لاءِ، وغيره، توهان کي صرف ساڄي پاسي کان مسئلي کي ڏسڻ جي ضرورت آهي. پاسي، جيئن ٽاسڪ نمبر 2 ۽ نمبر 3 ۾ ڏيکاريل آهي، جتي SAX مسئلي کي حل ڪرڻ لاءِ سڌو طريقا مهيا نه ڪيا هئا، پر، اسان جي ذهانت جي مهرباني، اسان ان صورتحال مان نڪرڻ جو رستو اختيار ڪرڻ جي قابل هئاسين. مضمون جو ايندڙ حصو مڪمل طور تي DOM لاء وقف ڪيو ويندو. مون کي اميد آهي ته توهان SAX کي ڄاڻڻ ۾ لطف اندوز ڪيو. تجربو، مشق ۽ توهان سمجھندا سين ته هر شيء بلڪل سادو آهي. ۽ اهو سڀ ڪجهه آهي، توهان جي پروگرامنگ سان سٺي قسمت ۽ جلد ئي DOM بابت حصو جو منتظر. توهان جي پڙهائي ۾ سٺي قسمت :) اڳيون مضمون: [مقابلو] هڪ جاوا پروگرامر لاءِ XML بنياديات - حصو 2 جو 3 اڳيون مضمون: [مقابلو] هڪ جاوا پروگرامر لاءِ XML بنياديات - حصو 3.2 جو 3 - DOM
تبصرا
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION