Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Парсирование xml, работа с xml 
:(
    Опции темы
sergey2k
Дата 12.11.2006, 08:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 4
Регистрация: 23.10.2006

Репутация: нет
Всего: нет



Привет!
Помогите разобраться. Есть такой xml (результат работы команды web service ) Никак не могу вытащить из него количество message, а также значения аттрибутов

Код

- <NewDataSet>
- <Table>
  <XML_F52E2B61-18A1-11d1-B105-00805F49916B><message MessageID="659" Subject="yht" Body="y" Date="12/10/2006" SentFromClient="1" IsDeletedByUser="0" UserID="34217455"><Status status="Read"/></message><message MessageID="661" Subject="testing from home" Body="testing from home" Date="13/10/2006" SentFromClient="0" IsDeletedByUser="0" UserID="34217455"><Status status="Read"/></message><message MessageID="670" Subject="JamesAllen" Body="Your request accepted, we will send you a notification when your request becomes available.&#x0A;&#x0A;Thank you." Date="15/10/2006" SentFromClient="0" IsDeletedByUser="0" UserID="34217455"><Status status="Read"/></message><message MessageID="707" Subject="tt" Body="tt" Date="25/10/2006" SentFromClient="1" IsDeletedByUser="0" UserID="34217455"><Status status="Read"/></message><message MessageID="717" Subject="erg" Body="reg" Date="31/10/2006" SentFromClient="0" IsDeletedByUser="0" UserID="34217455"><Status status="Read"/></message></XML_F52E2B61-18A1-11d1-B105-00805F49916B> 
  </Table>
  </NewDataSet>

PM MAIL   Вверх
Vyacheslav
Дата 13.11.2006, 10:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 2124
Регистрация: 25.3.2002
Где: Москва

Репутация: 47
Всего: 59



А хелп почитать. Слава богу, С++Builder пркдоставляет для обширные средства по переводу XML<->TABLE
см help XML mapper, XML Transform Provider, ClientDataSet

Добавлено @ 10:48 
Вот ветка, посвященная практически подобной задаче
http://forum.vingrad.ru/topic-115742/hl/xm...ider/index.html


--------------------
С уважением, Вячеслав Ермолаев
PM MAIL WWW ICQ   Вверх
Rodman
Дата 13.11.2006, 16:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


CIO
****


Профиль
Группа: Участник
Сообщений: 6144
Регистрация: 7.5.2006
Где: Ukraine ⇛ Kyiv ci ty

Репутация: 7
Всего: 122



Код

    NameNode=XMLDocument->DocumentElement;
    for (int i=0;i<NameNode->ChildNodes->Count;i++)
    ... 


Это сообщение отредактировал(а) Rodman - 13.11.2006, 16:07
PM MAIL WWW Skype GTalk YIM MSN   Вверх
SenkraD
Дата 14.11.2006, 18:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 933
Регистрация: 3.2.2006
Где: Украина::Киев

Репутация: 9
Всего: 23



Вообщем вот код, у меня работает.
Теперь по коду:
 - сам код  сопровождён коментами, поэтому что-то обяснять ещё  не вижу смысла, но есть смысл сказать о другом
   - sgData - это StringGrid 
   - XML - это XMLDocument:
      - Activate - думаю понятно;
      - Даные передаешь либо файлом через свойство FileName, либо через свойтво XML,
        но учти эти свойства взаимоисключающееся - если устанавливаешь одно, то другое обнуляется
Код

void __fastcall TfrmExample::btnLoadClick(TObject *Sender)
{
    int          MessageCount;//Количество сообщений

    //Ветки твоего XML-файла
    _di_IXMLNode NewDataSet;
    _di_IXMLNode Table;
    _di_IXMLNode Message;

    //Очищаем таблицу
    sgData->RowCount  = 0;
    sgData->RowCount  = 2;
    sgData->FixedRows = 1;

    //Начинаем работать с документом
    XML->Active      = true;                                                   //Открываем документ
    NewDataSet       = XML->DocumentElement;                                   //Получаем указатель на корневой узел
    Table            = NewDataSet->ChildNodes->GetNode(0);                     //Получаем указатель на узел "Table"
    MessageCount     = (Table->ChildNodes->GetNode(0))->ChildNodes->GetCount();//Получаем количество сообщений
    sgData->RowCount = MessageCount + 1;

    for(int i = 0; i < MessageCount; i ++)
    {
        Message = (Table->ChildNodes->GetNode(0))->ChildNodes->GetNode(i);     //Получаем указатель на сообщение с номером i

        //Далее считываем значения в таблицу
        sgData->Cells[0][i + 1] = Message->Attributes["MessageID"];
        sgData->Cells[1][i + 1] = Message->Attributes["Subject"];
        sgData->Cells[2][i + 1] = Message->Attributes["Body"];
        sgData->Cells[3][i + 1] = Message->Attributes["Date"];
        sgData->Cells[4][i + 1] = Message->Attributes["SentFromClient"];
        sgData->Cells[5][i + 1] = Message->Attributes["IsDeletedByUser"];
        sgData->Cells[6][i + 1] = Message->Attributes["UserID"];
        sgData->Cells[7][i + 1] = (Message->ChildNodes->GetNode(0))->Attributes["status"];
    }
}


Это сообщение отредактировал(а) SenkraD - 14.11.2006, 18:31


--------------------
 Имеющий язык - да не убоится спросить! 
user posted image
PM MAIL ICQ   Вверх
Vyacheslav
Дата 14.11.2006, 18:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 2124
Регистрация: 25.3.2002
Где: Москва

Репутация: 47
Всего: 59



Вообще то, если использовать ClientDataSet,  XMLTransformClient и с помощью пакета XML Tool сгенерить Transformation, то кода вообще не будет. Один дизайн.
И результат тоже можно увидеть в дизайне в DBGrid smile


--------------------
С уважением, Вячеслав Ермолаев
PM MAIL WWW ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++ Builder"
Rrader

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по С++ Builder обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Настоятельно рекомендуем заглянуть в DRKB (Delphi Russian Knowledge Base) - крупнейший в рунете сборник материалов по Дельфи


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Rrader.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C++ Builder | Следующая тема »


 




[ Время генерации скрипта: 0.0483 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.