Приобрести книгу можно на сайте ozon.ru и в электронном виде на Google Play:
7 thoughts on “Глава 40 – Работа с XML”
Здравствуйте, Макс!
В листингах 40.4 и 40.5 программы, которая создает XML-документ и записывает его в файл, в функциях contact и makeElement Вы передаете элемент domDoc, типа QDomDocument по ссылке (QDomDocument& domDoc).
Я правильно понимаю, что это сделано для того, чтобы снизить накладные расходы (т.е. при сохранении большого XML-файла не копировать большой объем данных в каждую из этих функций)?
Возник вопрос об отличии узла от элемента в XML. Правильно ли я понимаю, что узлом может быть и атрибут, и текст, а элемент – это конкретно открывающий и закрывающий тег и все параметры (имя, атрибут, текст и т.д.)? И любой элемент в XML также является узлом? Т.е., как я понял, узел, понятие более абстрактное, чем элемент…
Здравствуйте, Вячеслав!
Методы contact() и makeElement() можно было бы совместить в одном единственном методе. Я их разделил только для того чтобы немного сделать код программы более читаемым. Вызываемому методу makeElement() нужнет объект QDomDocument, поэтому мы его передаем в метод contact(), а тот передает его дальше. Узел дерева DOM обязательно имеет открывающий тег и закрывающий тег, все что располагается между этими тегами является дочерними узлами этого элемента. Аттрибуты не обладают таким свойством, поэтому узламы они не являются.
Спасибо за пояснение, Макс. Наверное, я немного некорректно сформулировал вопрос… Я имел ввиду не в принципе передачу в методы contact() и makeElement() объекта QDomDocument, в этом я разобрался. Меня интересовала именно передача его в методы ПО ССЫЛКЕ. Т.к. его можно передать по значению (by value), и всё так же будет корректно работать.
А вопрос об УЗЛЕ и ЭЛЕМЕНТЕ и их различии возник при работе с классами QDomNode и QDomElement. Получается у ЭЛЕМЕНТА не может быть потомков в виде УЗЛОВ, а у УЗЛА они могут быть? При этом любой ЭЛЕМЕНТ является узлом?
Да, именно так. Вывод для примера должен быть следующим:
“(name:Piggy email:piggy@mega.de phone:+49 631322187) (name:Kermit email:kermit@mega.de phone:+49 631322181) \n”
Здравствуйте, Макс!
В листингах 40.4 и 40.5 программы, которая создает XML-документ и записывает его в файл, в функциях contact и makeElement Вы передаете элемент domDoc, типа QDomDocument по ссылке (QDomDocument& domDoc).
Я правильно понимаю, что это сделано для того, чтобы снизить накладные расходы (т.е. при сохранении большого XML-файла не копировать большой объем данных в каждую из этих функций)?
Возник вопрос об отличии узла от элемента в XML. Правильно ли я понимаю, что узлом может быть и атрибут, и текст, а элемент – это конкретно открывающий и закрывающий тег и все параметры (имя, атрибут, текст и т.д.)? И любой элемент в XML также является узлом? Т.е., как я понял, узел, понятие более абстрактное, чем элемент…
Здравствуйте, Вячеслав!
Методы contact() и makeElement() можно было бы совместить в одном единственном методе. Я их разделил только для того чтобы немного сделать код программы более читаемым. Вызываемому методу makeElement() нужнет объект QDomDocument, поэтому мы его передаем в метод contact(), а тот передает его дальше. Узел дерева DOM обязательно имеет открывающий тег и закрывающий тег, все что располагается между этими тегами является дочерними узлами этого элемента. Аттрибуты не обладают таким свойством, поэтому узламы они не являются.
Спасибо за пояснение, Макс. Наверное, я немного некорректно сформулировал вопрос… Я имел ввиду не в принципе передачу в методы contact() и makeElement() объекта QDomDocument, в этом я разобрался. Меня интересовала именно передача его в методы ПО ССЫЛКЕ. Т.к. его можно передать по значению (by value), и всё так же будет корректно работать.
А вопрос об УЗЛЕ и ЭЛЕМЕНТЕ и их различии возник при работе с классами QDomNode и QDomElement. Получается у ЭЛЕМЕНТА не может быть потомков в виде УЗЛОВ, а у УЗЛА они могут быть? При этом любой ЭЛЕМЕНТ является узлом?
В листинге 40.9, на стр. 595 в строке: “qDebug() << "Can't open the file for reading:" << argv[1]", должен быть параметр argv[2].
Да, Вы правы там должен быть argv[2]
На странице 596: “Вывод на консоль будет следующим: …”, должны быть выведены все контакты в xml-документе, т.е. Piggy и Kermit.
Да, именно так. Вывод для примера должен быть следующим:
“(name:Piggy email:piggy@mega.de phone:+49 631322187) (name:Kermit email:kermit@mega.de phone:+49 631322181) \n”