0 / 0 / 0
Регистрация: 31.01.2017
Сообщений: 45
|
||||||
1 | ||||||
Класс парсинга xml10.02.2017, 15:25. Показов 1367. Ответов 7
Нужно реализовать метод класса, который ищет нужный элемент, имя которого передается методу извне.
Так вот не могу сообразить как реализовать проход по дереву. А еще лучше пример этого класса.
0
|
10.02.2017, 15:25 | |
Ответы с готовыми решениями:
7
Выбор для xml парсинга QT - класс для парсинга сайтов Как получить объектную модель из XML, записать в класс и затем вернуть обратно в XML Qt 5.13 Как сохранить содержимое xml файла (без парсинга) в MySql и как потом xml от туда извлечь |
93 / 93 / 33
Регистрация: 17.03.2012
Сообщений: 536
|
|
10.02.2017, 16:59 | 2 |
Возможно, вам лучше подойдет QXmlStreamReader
В документации есть простенький пример, все весьма наглядно
0
|
0 / 0 / 0
Регистрация: 31.01.2017
Сообщений: 45
|
|
10.02.2017, 17:07 [ТС] | 3 |
Думаю нет, потому что мне нужно вернуть элемент в другом методе, и вставить в дерево.
0
|
93 / 93 / 33
Регистрация: 17.03.2012
Сообщений: 536
|
||||||
11.02.2017, 09:48 | 4 | |||||
Сейчас нет исходников под рукой, но, на сколько помню, вы берете документ, берете у него родительский (главный, нулевой) узел (ноде), проходите по его дочерним узлам, в каждом из которых проходите по его дочерним узлам, в вашем примере это делается рекурсивно, только вы не передаете следующий узел, на сколько я понимаю, так что у вас поиск опять идет по первому ребенку
0
|
0 / 0 / 0
Регистрация: 31.01.2017
Сообщений: 45
|
|
11.02.2017, 19:49 [ТС] | 5 |
По вашему совету решил использовать QXmlStreamReader QXmlStreamWriter.
Тут мне помог QByteArray в качестве буфера. Так, для того чтобы, например вставить элемент в дерево, нужно в цикле записывать исходные данные в буфер и в нужном моменте создать нужный элемент. После чего, записать из буфера в исходный файл. Но тут теряется свойство хранения частями дерева в памяти. Исходя из этого, появляются мысли, что нужно делать два файла для ввода-вывода и после записи удалять уже прочитанный файл...
0
|
93 / 93 / 33
Регистрация: 17.03.2012
Сообщений: 536
|
|
12.02.2017, 10:03 | 6 |
Ну почему же? Вы считываете по элементам, нужные элементы вы всегда можете сохранить в QByteArray, а если хотите работать с потоками, то вообще в QBuffer, который является иодевайсом, из которого стримридер позволяет считывать, наряду с байтэррэем
То есть, если вам в одном файле надо что-то заменить, вы считали, нашли нужное, сохранили в буфер, изменили, закрыли стримридер, открыли стримрайтер, записали в файл Смысл использовать хмлстримридер вместо домдокумента в том, что дом-модель занимает много памяти и не очень быстрая, а стримридер не хранит все в памяти и при этом обеспечивает быстродействие (по заверениям документации )
0
|
182 / 37 / 5
Регистрация: 29.01.2013
Сообщений: 253
|
|
13.02.2017, 17:34 | 7 |
0
|
0 / 0 / 0
Регистрация: 31.01.2017
Сообщений: 45
|
|
14.02.2017, 00:09 [ТС] | 8 |
0
|
14.02.2017, 00:09 | |
14.02.2017, 00:09 | |
Помогаю со студенческими работами здесь
8
Библиотека для xml парсинга Реализация парсинга XML файлов Посоветуйте библиотеку для парсинга XML (xdxf) Математические алгоритмы для парсинга текста из word и xml Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |