QDOM+QAbstractItemModel+xml+appendChild |
Здравствуйте, гость ( Вход | Регистрация )
QDOM+QAbstractItemModel+xml+appendChild |
ham |
8.1.2010, 20:01
Сообщение
#1
|
Новичок Группа: Новичок Сообщений: 1 Регистрация: 8.1.2010 Пользователь №: 1358 Спасибо сказали: 0 раз(а) Репутация: 0 |
Доброго времени суток всем.
Чета у меня уже мозг кипит, ни чего не понимаю. Помогите. вот кусок xml CODE <catalogues> <catalogue id="101" name="New catalogue" > <element> <string_view stdf="0" id="102" > <svfunction type="N 6 0 *" id="103" /> <fieldid id="104" >0</fieldid> </string_view> </element> <group/> <forms/> <webforms/> <description id="105" /> </catalogue> </catalogues> узел catalogue формируется так CODE DomCfgItem *DomCfgItem::insertCatalogue(QString &name) { DomCfgItem *r=0, *i=0,*t=0,*t2=0; int index=0; r = find( md_catalogues ); QString name2=md_catalogue; QString name3=""; QString ttt=""; if ( r!=0 ) { while (findByName( "Catalogue." + name)){ ttt.setNum(index); name =name+ttt; ; index++; } insert( r, name2,name,(long)0); i = findByName( "Catalogue." + name); name2=md_element; name3=QString::null; insert( i, name2, name3,(long) -1 ); t= findByName( "Catalogue." + name+"."+md_element); QDomElement it,it2; QDomDocument xml,xml2; long id = nextID(); it = xml.createElement(md_string_view); if (!it.isNull()){ if ( id >= 100 ) it.setAttribute(mda_id,QString::number(id)); it.setAttribute(mda_stdf,QString::number(0)); it2=xml2.createElement(md_svfunction); it2.setAttribute(mda_id,QString::number(nextID())); name3="N 6 0 *"; it2.setAttribute(mda_type,name3); it.appendChild(it2); it2=xml2.createElement(md_fieldid); it2.setAttribute(mda_id,QString::number(nextID())); QDomText domText=xml2.createTextNode("0"); it2.appendChild(domText); it.appendChild(it2); t->node().appendChild( it ); } name3=QString::null; name2=md_group; insert( i,name2 , name3, (long)99 ); name2=md_forms; insert( i, name2, name3, (long)99 ); name2=md_webforms; insert( i,name2 , name3,(long)99 ); it = xml.createElement(md_description); it.setAttribute(mda_id,QString::number(nextID())); i->node().appendChild( it ); qDebug() << "all add"; } else { aLog::print(aLog::Debug,"not find md_catalogues \n"); } return i; } все работает суперски , потом начнаем добавлять к узлу еще данные и ни чего не выходит, добавляем этим CODE DomCfgItem *DomCfgItem::insertField(DomCfgItem *context,QString &name) { DomCfgItem *sec, *f; QDomElement it,it2; QDomDocument xml,xml2; long id = nextID(); it = xml.createElement(md_field); if (!it.isNull()){ if ( id >= 100 ) it.setAttribute(mda_id,QString::number(id)); it.setAttribute(mda_name,name); it.setAttribute(mda_type,"N 2 1 *"); it.setAttribute(mda_sort,"0"); it.setAttribute(mda_nz,"0"); it.setAttribute(mda_sum,"0" ); it.setAttribute(mda_plus,"0"); it2=xml2.createElement(md_description); if (!it2.isNull()){ it2.setAttribute(mda_id,QString::number(nextID())); it.appendChild(it2); }else qDebug() << "DomCfgItem::insertField error2 appendChild"; context->node().appendChild( it ); qDebug() << "DomCfgItem::insertField appendChild ok"; } else qDebug() << "DomCfgItem::insertField error appendChild"; f=context->find(md_field); if (f==0) qDebug() << "DomCfgItem::insertField can`t find field "; else qDebug() << "DomCfgItem::insertField field is find "; return f; } context этот указазтель указывает сразу на узел element а получить надо это CODE <catalogues> <catalogue id="101" name="New catalogue" > <element> <string_view stdf="0" id="102" > <svfunction type="N 6 0 *" id="103" /> <fieldid id="104" >0</fieldid> </string_view> <field sum="0" type="N 2 1 *" plus="0" id="101" nz="0" name="new_field" sort="0" > <description id="102" /> </field> </element> <group/> <forms/> <webforms/> <description id="105" /> </catalogue> </catalogues> вот, помогите советом, может ошибка есть или как поэксперементировать чтоб оно таки заработало, Зарание спасибо. |
|
|
Текстовая версия | Сейчас: 14.1.2025, 0:45 |