DOM-парсинг: запись в QDomElement |
Здравствуйте, гость ( Вход | Регистрация )
DOM-парсинг: запись в QDomElement |
void* |
16.1.2009, 18:24
Сообщение
#1
|
Программист-самоучка Группа: Участник Сообщений: 429 Регистрация: 4.6.2008 Пользователь №: 193 Спасибо сказали: 28 раз(а) Репутация: 3 |
каким образом можно поменять текст внутри тега, например есть тег:
<sometag>sometext</sometag> и я хочу поменять строку sometext на другую (допустим sometext2). Как это возможно сделать? с аттрибутами то все просто, есть QDomElement::setAttribute(), есть также QDomElement::attribute(), а вот для текста внутри тега есть только QDomElement::text(), но он только возвращает значение. Как быть? |
|
|
Litkevich Yuriy |
16.1.2009, 18:40
Сообщение
#2
|
разработчик РЭА Группа: Сомодератор Сообщений: 9669 Регистрация: 9.1.2008 Из: Тюмень Пользователь №: 64 Спасибо сказали: 807 раз(а) Репутация: 94 |
QDomElement::text(), этим добром лучше не пользуйся, эта функция рекурсивно по ветке бегает, используй datavoid QDomCharacterData::setData ( const QString & v ) |
|
|
void* |
16.1.2009, 19:47
Сообщение
#3
|
Программист-самоучка Группа: Участник Сообщений: 429 Регистрация: 4.6.2008 Пользователь №: 193 Спасибо сказали: 28 раз(а) Репутация: 3 |
пасиб, попробую
|
|
|
void* |
16.1.2009, 21:58
Сообщение
#4
|
Программист-самоучка Группа: Участник Сообщений: 429 Регистрация: 4.6.2008 Пользователь №: 193 Спасибо сказали: 28 раз(а) Репутация: 3 |
блин или я туплю или все равно ничего не записывает. Вот полностью функция:
полный код функции
Сообщение отредактировал void* - 17.1.2009, 15:42 |
|
|
Litkevich Yuriy |
17.1.2009, 5:21
Сообщение
#5
|
разработчик РЭА Группа: Сомодератор Сообщений: 9669 Регистрация: 9.1.2008 Из: Тюмень Пользователь №: 64 Спасибо сказали: 807 раз(а) Репутация: 94 |
приведу клочёк своего кода:
Раскрывающийся текст
тут смотри:
я до этой штуки долго доходил, и логики вроде минимум, но работает железно Если надо могу дать весь исходник, он гуляет по XML-дереву и выводит в консоль автопортрет узла в котором в данный момент находится: вывод в консоль/файл
|
|
|
void* |
17.1.2009, 11:53
Сообщение
#6
|
Программист-самоучка Группа: Участник Сообщений: 429 Регистрация: 4.6.2008 Пользователь №: 193 Спасибо сказали: 28 раз(а) Репутация: 3 |
т.е. насколько я понял, в моем случае нужно делать примерно так:
правильно? |
|
|
Litkevich Yuriy |
17.1.2009, 12:58
Сообщение
#7
|
разработчик РЭА Группа: Сомодератор Сообщений: 9669 Регистрация: 9.1.2008 Из: Тюмень Пользователь №: 64 Спасибо сказали: 807 раз(а) Репутация: 94 |
|
|
|
void* |
17.1.2009, 15:40
Сообщение
#8
|
Программист-самоучка Группа: Участник Сообщений: 429 Регистрация: 4.6.2008 Пользователь №: 193 Спасибо сказали: 28 раз(а) Репутация: 3 |
Litkevich Yuriy, так тоже не работает.
С чтением то у меня тоже проблем нет, а вот с записью тут несколько сложнее... походу проблема решена. Есть два способа решения моей проблемы в зависимости от ситуации: 1) когда тег уже имеет какой-либо текст:
т.е. firstChild() в этом случае вернет QDomNode, который по сути именно текст внутри тега 2) когда тег пустой, т.е. что-то вроде <sometag/>, то firstChild() возвратит NULL, надо тогда действовать таким образом:
вобщем вот так вот как-то некрасиво получается... |
|
|
Litkevich Yuriy |
17.1.2009, 16:13
Сообщение
#9
|
разработчик РЭА Группа: Сомодератор Сообщений: 9669 Регистрация: 9.1.2008 Из: Тюмень Пользователь №: 64 Спасибо сказали: 807 раз(а) Репутация: 94 |
offtop:
Вообще мне этот DOM не понравился, на больших файлах тормозит дико. Сильно запутаный - работать сложно. А альтернативы, в режиме чтение-запись, в Qt'ях похоже нету. |
|
|
void* |
17.1.2009, 18:54
Сообщение
#10
|
Программист-самоучка Группа: Участник Сообщений: 429 Регистрация: 4.6.2008 Пользователь №: 193 Спасибо сказали: 28 раз(а) Репутация: 3 |
SAX?
|
|
|
Текстовая версия | Сейчас: 27.12.2024, 21:23 |