JavaRush /Блоги Java /Random-TG /Асосҳои XML барои барномасози Java. Қисми 3.2 аз 3 - DOM
Ярослав
Сатҳи
Днепр

Асосҳои XML барои барномасози Java. Қисми 3.2 аз 3 - DOM

Дар гурӯҳ нашр шудааст
<h2>Муқаддима</h2>Салом ба ҳамаи хонандагони мақола, ин қисм ба DOM бахшида шудааст. Навбати навбатӣ ба JAXB бахшида мешавад ва бо ин, давраи асосҳои XML ба анҷом мерасад. Аввал назарияи андаке ва баъд танҳо амалия хоҳад буд. Биёед оғоз кунем. <h2>DOM (Модели Объекти Ҳуҷҷат) - НАЗАРИЯ</h2> Коркарди DOM тарзе тарҳрезӣ шудааст, ки он ҳама XML-ро якбора мехонад ва онро захира мекунад ва иерархияро дар шакли дарахт эҷод мекунад, ки мо тавассути он ба осонӣ ҳаракат карда метавонем. ва дастрасӣ ба унсурҳои ба мо лозим аст. Ҳамин тариқ, мо метавонем бо назардошти истинод ба унсури боло, ҳамаи истинодҳоро ба унсурҳои дохorи он гирем. Гузашта аз ин, унсурҳое, ки дар дохor элемент ҳастанд, фарзандони ин элемент мебошанд ва он волидайни онҳост. Вақте ки мо тамоми XML-ро дар хотира хондем, мо танҳо дар сохтори он сайр мекунем ва амалҳои лозимаро иҷро мекунем. Каме дар бораи қисми барномасозии DOM дар Java: DOM интерфейсҳои зиёде дорад, ки барои тавсифи додаҳои гуногун сохта шудаанд. Ҳамаи ин интерфейсҳо як интерфейси умумиро мерос мегиранд - Node. Зеро, дар асл, намуди маъмултарини додаҳо дар DOM Node мебошад, ки ҳама чиз метавонад бошад. Ҳар як гиреҳ дорои усулҳои зерини муфид барои дарёфти иттилоот аст:
  1. getNodeName- номи мизбонро гиред.
  2. getNodeValue- арзиши гиреҳро гиред.
  3. getNodeType- намуди гиреҳро гиред.
  4. getParentNode– гиреҳеро, ки гиреҳи додашуда дар дохor он ҷойгир аст, гиред.
  5. getChildNodes– гирифтани ҳамаи гиреҳҳои ҳосилшуда (гиреҳҳое, ки дар дохor гиреҳи дода шудаанд).
  6. getAttributes- гирифтани ҳама атрибутҳои гиреҳ.
  7. getOwnerDocument– ҳуҷҷати ин гиреҳро гиред.
  8. getFirstChild/getLastChild– гиреҳи аввал/охирин ҳосилшударо гиред.
  9. getLocalName- ҳангоми коркарди фазои номҳо барои гирифтани ном бе префикс муфид аст.
  10. getTextContent– тамоми матнро дар дохor элемент ва ҳама унсурҳои дохor элементи додашуда, аз ҷумла танаффусҳои сатр ва фосила бармегардонад.
Эзоҳ дар бораи усули 9: он ҳамеша нулро бармегардонад, агар шумо усули setNamespaceAware(true) -ро дар DocumentFactory барои оғоз кардани коркарди фазои ном истифода набаред. Акнун, як ҷузъиёти муҳим: усулҳо барои ҳама гиреҳҳо маъмуланд, аммо дар Node мо метавонем ҳам элемент ва ҳам атрибут дошта бошем. Ва дар ин ҷо саволҳо мавҷуданд: унсур чӣ арзиш дошта метавонад? Кадом гиреҳҳои ҳосилшуда метавонад атрибут дошта бошад? Ва дигарон мувофиқ нестанд. Ва ҳама чиз хеле оддӣ аст: ҳар як усул вобаста ба намуди Node кор мекунад . Барои ошуфта нашавед, албатта, мантиқро истифода бурдан басанда аст. Масалан: атрибутҳо кадом сифатҳоро доранд? Элемент боз чӣ маъно дорад? Аммо, барои он ки ҳама чизро худатон санҷида нашавед, дар ҳуҷҷатҳои расмӣ ҷадвали хеле муфид мавҷуд аст, ки чӣ гуна ҳар як усул вобаста ба намуди гиреҳ кор мекунад: Сифат бад шуд, бинобар ин дар ин ҷо истиноди ҳуҷҷатҳо мавҷуд аст (ҷадвали дар дар болои саҳифа): Ҳуҷҷатҳои гиреҳ Муҳимтарин чизе, ки бояд дар хотир дошт:
  1. ТАНҲО унсурҳо атрибутҳо доранд.
  2. Элементҳо маъно надоранд.
  3. Номи гиреҳи элемент бо номи тег ва номи гиреҳи атрибут бо номи атрибут якхела аст.
<h2>DOM (Модели Объекти Ҳуҷҷат) - АМРИКО</h2>Дар қисми амалӣ мо намудҳои гуногуни вазифаҳоро оид ба ҷустуҷӯи иттилоот дар XML таҳлил мекунем. Мо инчунин ду вазифаро аз мақолаи қаблӣ барои муқоисаи роҳат гирифтем. Биёед оғоз кунем ва аз воридот оғоз кардан хуб мебуд:
import org.w3c.dom.Document;
import org.w3c.dom.NamedNodeMap;
import org.w3c.dom.Node;
import org.w3c.dom.NodeList;
import org.xml.sax.SAXException;

import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.parsers.ParserConfigurationException;
import java.io.File;
import java.io.IOException;
Ман воридотро таъмин мекунам, то ки шумо синфҳоро омехта накунед :) Вазифаи №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;
    }
}
Акнун, ки мо тавсифи сохтори нигоҳдории маълумот дорем, ба мо коллексия лозим аст, ки кормандонро нигоҳ медорад. Мо онро дар худи code эҷод мекунем. Мо инчунин бояд ҳуҷҷатеро дар асоси XML-и худ созем:
public class DOMExample {
    // Список для сотрудников из XML file
    private static ArrayList<Employee> employees = new ArrayList<>();

    public static void main(String[] args) throws ParserConfigurationException, SAXException, IOException {
        // Получение фабрики, чтобы после получить билдер documentов.
        DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();

        // Получor из фабрики билдер, который парсит XML, создает структуру Document в виде иерархического дерева.
        DocumentBuilder builder = factory.newDocumentBuilder();

        // Запарсor XML, создав структуру Document. Теперь у нас есть доступ ко всем elementм, Howим нам нужно.
        Document document = builder.parse(new File("resource/xml_file1.xml"));
    }
}
Вақте ки мо ҳуҷҷатро қабул мекунем, мо дар тамоми сохтори файли XML қудрати номаҳдуд дорем. Мо метавонем ҳама гуна унсурҳоро дар вақти дилхоҳ гирем, барои тафтиши ҳама гуна маълумот баргардем ва дар маҷмӯъ, нисбат ба SAX муносибати фасеҳтар. Дар доираи ин вазифа, мо бояд танҳо ҳамаи унсурҳои кормандонро истихроҷ кунем ва сипас тамоми маълумотро дар бораи онҳо истихроҷ кунем. Ин хеле оддӣ аст:
public class DOMExample {
    // Список для сотрудников из XML file
    private static ArrayList<Employee> employees = new ArrayList<>();

    public static void main(String[] args) throws ParserConfigurationException, SAXException, IOException {
        // Получение фабрики, чтобы после получить билдер documentов.
        DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();

        // Получor из фабрики билдер, который парсит XML, создает структуру Document в виде иерархического дерева.
        DocumentBuilder builder = factory.newDocumentBuilder();

        // Запарсor XML, создав структуру Document. Теперь у нас есть доступ ко всем elementм, Howим нам нужно.
        Document document = builder.parse(new File("resource/xml_file1.xml"));

        // Получение списка всех элементов employee внутри корневого element (getDocumentElement возвращает ROOT элемент XML file).
        NodeList employeeElements = document.getDocumentElement().getElementsByTagName("employee");

        // Перебор всех элементов employee
        for (int i = 0; i < employeeElements.getLength(); i++) {
            Node employee = employeeElements.item(i);

            // Получение атрибутов каждого element
            NamedNodeMap attributes = employee.getAttributes();

            // Добавление сотрудника. Атрибут - тоже Node, потому нам нужно получить meaning атрибута с помощью метода getNodeValue()
            employees.add(new Employee(attributes.getNamedItem("name").getNodeValue(), attributes.getNamedItem("job").getNodeValue()));
        }

        // Вывод информации о каждом сотруднике
        for (Employee employee : employees)
            System.out.println(String.format("Информации о сотруднике: Name - %s, должность - %s.", employee.getName(), employee.getJob()));
    }
}
Тавсифи ин ҳалли дуруст дар ҳалли аст. Тавсия дода мешавад, ки пас аз дидани code, ба назария баргардед ва онро дубора хонед. Дар асл, ҳама чиз ба таври инстинктӣ равшан аст. Коментарияхоро бодиққат хонед ва ҳеҷ саволе набошад, ва агар бошад, шумо метавонед дар коментария нависед, ман ҷавоб медиҳам, ё дар link, ё танҳо IDEA-и худро иҷро кунед ва кӯшиш кунед, ки худатон бо code бозӣ кунед, агар шумо ҳоло ин корро накардаед. Пас, пас аз иҷро кардани code, мо натиҷаи зеринро гирифтем:
Информации о сотруднике: 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 - аз консол номи элемент ворид карда мешавад, ки дар бораи он шумо бояд маълумотро дар бораи ҳамаи элементҳои дохor он ва атрибутҳои онҳоро аз файли 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>
Ҳама чиз хеле оддӣ аст: мо бояд элементро бо номи он, ки мо онро ҳисоб мекунем, гирем ва сипас аз тамоми гиреҳҳои кӯдак гузарем. Барои ин ба шумо лозим аст, ки тавассути тамоми гиреҳҳои кӯдаки ҳама гиреҳҳои кӯдакона, ки унсурҳо мебошанд, такрор кунед. Ҳалли ин мушкилот:
public class DOMExample {
    public static void main(String[] args) throws ParserConfigurationException, SAXException, IOException {
        // Ридер для считывания имени тега из консоли
        BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));

        // Получение фабрики, чтобы после получить билдер documentов.
        DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();

        // Получor из фабрики билдер, который парсит XML, создает структуру Document в виде иерархического дерева.
        DocumentBuilder builder = factory.newDocumentBuilder();

        // Запарсor XML, создав структуру Document. Теперь у нас есть доступ ко всем elementм, Howим нам нужно.
        Document document = builder.parse(new File("resource/xml_file3.xml"));

        // Считывание имени тега для поиска его в файле
        String element = reader.readLine();

        // Получение списка элементов, однако для удобства будем рассматривать только первое совпадение в documentе.
        // Так же заметьте, что мы ищем элемент внутри documentа, а не рут element. Это сделано для того, чтобы рут элемент тоже искался.
        NodeList matchedElementsList = document.getElementsByTagName(element);

        // Даже если element нет, всегда будет возвращаться список, просто он будет пустым.
        // Потому, чтобы утверждать, что element нет в файле, достаточно проверить размер списка.
        if (matchedElementsList.getLength() == 0) {
            System.out.println("Tag " + element + " не был найден в файле.");
        } else {
            // Получение первого element.
            Node foundedElement = matchedElementsList.item(0);

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

            // Если есть данные внутри, вызов метода для вывода всей информации
            if (foundedElement.hasChildNodes())
                printInfoAboutAllChildNodes(foundedElement.getChildNodes());
        }
    }

    /**
     * Рекурсивный метод, который будет выводить информацию про все узлы внутри всех узлов, которые пришли параметром, пока не будут перебраны все узлы.
     * @param list Список узлов.
     */
    private static void printInfoAboutAllChildNodes(NodeList list) {
        for (int i = 0; i < list.getLength(); i++) {
            Node node = list.item(i);

            // У элементов есть два вида узлов - другие элементы or текстовая информация. Потому нужно разбираться две ситуации отдельно.
            if (node.getNodeType() == Node.TEXT_NODE) {
                // Фильтрация информации, так How пробелы и переносы строчек нам не нужны. Это не информация.
                String textInformation = node.getNodeValue().replace("\n", "").trim();

                if(!textInformation.isEmpty())
                    System.out.println("Внутри element найден текст: " + node.getNodeValue());
            }
            // Если это не текст, а элемент, то обрабатываем его How элемент.
            else {
                System.out.println("Найден элемент: " + node.getNodeName() + ", его атрибуты:");

                // Получение атрибутов
                NamedNodeMap attributes = node.getAttributes();

                // Вывод информации про все атрибуты
                for (int k = 0; k < attributes.getLength(); k++)
                    System.out.println("Name атрибута: " + attributes.item(k).getNodeName() + ", его meaning: " + attributes.item(k).getNodeValue());
            }

            // Если у данного element еще остались узлы, то вывести всю информацию про все его узлы.
            if (node.hasChildNodes())
                printInfoAboutAllChildNodes(node.getChildNodes());
        }
    }
}
Тавсифи куллии ҳалли он дар шарҳҳо мавҷуд аст, аммо ман мехостам каме ба таври графикӣ равишеро, ки мо истифода бурдем, бо истифода аз мисол аз расм аз назария нишон диҳам. Мо тахмин мезанем, ки мо бояд маълумотро дар бораи теги html нишон диҳем. Тавре ки шумо мебинед, мо бояд аз боло то поён аз решаи дарахт биравем. Ҳама сатрҳо гиреҳ мебошанд. Дар ҳалли масъала мо ба таври рекурсивӣ аз ибтидои элементи дилхоҳ ба воситаи ҳамаи гиреҳҳои он мегузарем ва агар яке аз гиреҳҳои он элемент бошад, пас мо инчунин тавассути тамоми гиреҳҳои ин элемент такрор мекунем. Пас, пас аз иҷро кардани code, мо барои элементи реша баромади зеринро гирифтем:
Элемент был найден!
Найден элемент: 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
Масъала бомуваффакият хал карда шуд! Вазифаи №3 – аз файли зерини XML, ки дар он маълумот дар бораи донишҷӯён, профессорон ва кормандон нигоҳ дошта мешавад, шумо бояд маълумотро хонед ва онро ба консол бароред:
<?xml version="1.0" encoding="UTF-8"?>
<database>
    <students>
        <student name="Maksim" course="3" specialization="CE" />
        <student name="Stephan" course="1" specialization="CS" />
        <student name="Irvin" course="2" specialization="CE" />
    </students>

    <professors>
        <professor name="Herald" experience="7 years in University" discipline="Math" />
        <professor name="Adam" experience="4 years in University" discipline="Programming" />
        <professor name="Anton" experience="6 years in University" discipline="English" />
    </professors>

    <service>
        <member name="John" position="janitor" />
        <member name="Jordan" position="janitor" />
        <member name="Mike" position="janitor" />
    </service>
</database>
Вазифа хеле содда, вале ҷолиб аст. Аввалан, мо бояд 4 синфро эҷод кунем: корманд, профессор ва донишҷӯ, инчунин як синфи абстрактии умумии Human, то тағирёбандаи номро аз ҳар як синф ба як махраҷи умумӣ биёрад: Синфи абстрактии волидайн
public abstract class Human {
    private String name;

    public Human(String name) {
        this.name = name;
    }

    public String getName() {
        return name;
    }
}
Донишҷӯ
public class Student extends Human {
    private String course, specialization;

    public Student(String name, String course, String specialization) {
        super(name);
        this.course = course;
        this.specialization = specialization;
    }

    public String getCourse() {
        return course;
    }

    public String getSpecialization() {
        return specialization;
    }

    public String toString() {
        return "Голодный студент " + getName() + " " + course + "-го курса, обучающийся по специальности " + specialization;
    }
}
профессор
public class Professor extends Human {
    private String experience, discipline;

    public Professor(String name, String experience, String discipline) {
        super(name);
        this.experience = experience;
        this.discipline = discipline;
    }

    public String getExperience() {
        return experience;
    }

    public String getDiscipline() {
        return discipline;
    }

    public String toString() {
        return "Профессор " + getName() + ", обладающий опытом: \"" + experience + "\", выкладает дисциплину " + discipline;
    }
}
Корманд
public class Member extends Human {
    private String position;

    public Member(String name, String position) {
        super(name);
        this.position = position;
    }

    public String getPosition() {
        return position;
    }

    public String toString() {
        return "Сотрудник обслуживающего персонала " + getName() + ", должность: " + position;
    }
}
Акнун, ки дарсҳои мо омодаанд, ба мо лозим аст, ки code нависем, то ҳамаи унсурҳои донишҷӯ, профессор ва аъзоро ба даст орем ва пас атрибутҳои онҳоро гирем. Барои нигоҳдорӣ, мо коллексияеро истифода мебарем, ки an objectҳои синфи волидайнро барои ҳама умумӣ нигоҳ медорад - Human. Ва ҳамин тавр, роҳи ҳалли ин мушкилот:
public class DOMExample {
    // Коллекция для хранения всех людей
    private static ArrayList<Human> humans = new ArrayList<>();

    // Константы для элементов
    private static final String PROFESSOR = "professor";
    private static final String MEMBER = "member";
    private static final String STUDENT = "student";

    public static void main(String[] args) throws ParserConfigurationException, SAXException, IOException {
        // Получение фабрики, чтобы после получить билдер documentов.
        DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();

        // Получor из фабрики билдер, который парсит XML, создает структуру Document в виде иерархического дерева.
        DocumentBuilder builder = factory.newDocumentBuilder();

        // Запарсor XML, создав структуру Document. Теперь у нас есть доступ ко всем elementм, Howим нам нужно.
        Document document = builder.parse(new File("resource/xml_file3.xml"));

        // Получение информации про каждый элемент отдельно
        collectInformation(document, PROFESSOR);
        collectInformation(document, MEMBER);
        collectInformation(document, STUDENT);

        // Вывод информации
        humans.forEach(System.out::println);
    }

    /**
     * Метод ищет информацию про теги по имени element и вносит всю информацию в коллекцию humans.
     * @param document Документ, в котором будем искать элементы.
     * @param element Name element, теги которого нужно найти. Должна быть одна из констант, которые определяются выше.
     */
    private static void collectInformation(Document document, final String element) {
        // Получение всех элементов по имени тега.
        NodeList elements = document.getElementsByTagName(element);

        // Перебор всех найденных элементов
        for (int i = 0; i < elements.getLength(); i++) {
            // Получение всех атрибутов element
            NamedNodeMap attributes = elements.item(i).getAttributes();
            String name = attributes.getNamedItem("name").getNodeValue();

            // В зависимости от типа element, нам нужно собрать свою дополнительну информацию про каждый подкласс, а после добавить нужные образцы в коллекцию.
            switch (element) {
                case PROFESSOR: {
                    String experience = attributes.getNamedItem("experience").getNodeValue();
                    String discipline = attributes.getNamedItem("discipline").getNodeValue();

                    humans.add(new Professor(name, experience, discipline));
                } break;
                case STUDENT: {
                    String course = attributes.getNamedItem("course").getNodeValue();
                    String specialization = attributes.getNamedItem("specialization").getNodeValue();

                    humans.add(new Student(name, course, specialization));
                } break;
                case MEMBER: {
                    String position = attributes.getNamedItem("position").getNodeValue();

                    humans.add(new Member(name, position));
                } break;
            }
        }
    }
}
Дар хотир доред, ки ба мо танҳо номи элемент лозим аст, то ҳамаи ин унсурҳоро аз ҳуҷҷат ба даст орем. Ин раванди дарёфти маълумоти заруриро хеле осон мекунад. Ҳама маълумот дар бораи code дар шарҳҳо дохил карда шудаанд. Ҳеҷ чизи наве истифода нашуд, ки дар вазифаҳои қаблӣ мавҷуд набуд. Натиҷаи code:
Профессор Herald, обладающий опытом: "7 years in University", выкладает дисциплину Math
Профессор Adam, обладающий опытом: "4 years in University", выкладает дисциплину Programming
Профессор Anton, обладающий опытом: "6 years in University", выкладает дисциплину English
Сотрудник обслуживающего персонала John, должность: janitor
Сотрудник обслуживающего персонала Jordan, должность: janitor
Сотрудник обслуживающего персонала Mike, должность: janitor
Голодный студент Maksim 3-го курса, обучающийся по специальности CE
Голодный студент Stephan 1-го курса, обучающийся по специальности CS
Голодный студент Irvin 2-го курса, обучающийся по специальности CE
Мушкилот ҳал шуд! Тавсияҳо ҳангоми истифодаи DOM ва кай истифода бурдани SAX Фарқи байни ин абзорҳо дар фаъолият ва суръат аст. Агар шумо ба функсионалии фасењтар ниёз доред ва тавонед, ки иҷрои барномаро сарфи назар кунед, пас интихоби шумо DOM аст, аммо агар ҳадафи асосии шумо кам кардани хароҷоти хотира бошад, пас DOM интихоби беҳтарин нест, зеро он тамоми маълумотро аз файли XML ва захира мекунад. Аз ин рӯ, усули хониши пайдарпайи SAX арзонтар аст. Мухтасар: агар ба шумо иҷроиш лозим бошад - SAX, функсия - DOM. <h2>Хулоса</h2>Ҳар як барномасоз асбобҳои худро дорад ва вобаста ба вазифа шумо бояд асбобҳои муайянро истифода баред. Дар мақолаҳо дар бораи SAX ва DOM, ҳадафи ман ин буд, ки ба шумо чӣ гуна гирифтани маълумотро аз файлҳои XML ва коркарди онҳоро тавре, ки ба шумо лозим аст, таълим диҳед. Аммо, ҳатто агар шумо ин мақолаҳоро хонда бошед ҳам, шумо даъво карда наметавонед, ки чӣ тавр истифода бурдани ин асбобҳоро омӯхтаед. Шумо бояд машқ кунед, codeро аз мақолаҳо санҷед, фаҳмед, ки он чӣ гуна кор мекунад ва кӯшиш кунед, ки худатон чизе нависед. Охир, чизи аз хама мухимаш амалия аст. Маколаи охирин дар рузхои наздик ва аз афташ, баъди анчоми конкурс чоп мешавад ва ба JAXB бахшида мешавад. JAXB асбобест барои захира кардани an objectҳо дар барномаи шумо дар формати XML. Ин ҳама, ман умедворам, ки ин мақола муфид буд ва барори кор дар барномасозии шумо :) Мақолаи қаблӣ: [Мусобиқа] Асосҳои XML барои барномасози Java - Қисми 3.1 аз 3 - SAX
Шарҳҳо
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION