Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Чтение XML-документа 
:(
    Опции темы
xvr
Дата 7.6.2011, 12:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 7046
Регистрация: 28.8.2007
Где: Дублин, Ирландия

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



Цитата(DCamer @ 6.6.2011,  22:27)
Интересно, и как все эти item вгрузить?

Ну собственно так, как вы и грузили - перебором элементов в Document'е. Только вам не придется заниматься сканированием иерархии Document'а - они все будут лежать прямо в корне

PM MAIL   Вверх
DCamer
Дата 7.6.2011, 20:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



Перебор работает, и почему, то пишет List index out of bounds (3), он что ли ищет четвёртый узел...
Код

        XMLDoct->LoadFromFile(Form1->OpenDialog1->FileName);
        XMLDoct->Active=true;
        XMLDoct->Encoding="UTF-8";
        XMLDoct->Options=XMLDoct->Options << doNodeAutoIndent;
        IXMLNode *nodRoot= XMLDoct->DocumentElement;
        IXMLNode *nodElement = nodRoot->ChildNodes->FindNode( "Question" );
        if ( nodElement ) {
        for (int i = 0; i < n; i++) {
                nodElement = nodRoot->ChildNodes->Nodes[i];
                value= nodElement->GetAttribute("id");
                ListBox1->Items->Add(value);
                }
            }

А трансформация, почему, то вызывает «Access violation at address 00459981 in module 'smee.exe'. Write of address 0053378D.»
Код

      AnsiString values,nms,vals,nnm;
    _di_IXMLDocument MatEff = NewXMLDocument();
    _di_IXMLDocument MatEffXSL = NewXMLDocument();
    _di_IXMLDocument Transform = NewXMLDocument();
    try {
        MatEff->LoadFromFile(fp+"\\MaterialEffects.xml");
        MatEff->Active=true;
        MatEff->Options=MatEff->Options << doNodeAutoIndent;
        MatEffXSL->LoadFromFile(fp+"\\MaterialEffects.xsl");
        MatEffXSL->Active=true;
        MatEffXSL->Options=MatEffXSL->Options << doNodeAutoIndent;
        Transform->Active=true;
        IXMLNode *nodRoot= MatEff->DocumentElement;
        IXMLNode *xslnodRoot= MatEffXSL->DocumentElement;
        nodRoot->TransformNode(xslnodRoot, Transform);
        Transform->Options=MatEffXSL->Options << doNodeAutoIndent;
        IXMLNode *nodtRoot= Transform->DocumentElement;
        IXMLNode *nodTable;
        IXMLNode *nodElement;
        n=nodRoot->ChildNodes->Count;
        for (int i = 0; i < n; i++) {
            nodElement = nodtRoot->ChildNodes->Get(i);
            nnm = nodElement->GetNodeName();
            eff->Items->Add(nnm);
            }
    }
    __finally { delete MatEff; MatEffXSL; Transform;}


Это сообщение отредактировал(а) DCamer - 7.6.2011, 20:49
--------------------
Нуб!   Windows 7 Ultimate x64, Embarcadero RAD Studio 2010 - C++Builder 2010
PM MAIL   Вверх
xvr
Дата 7.6.2011, 22:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 7046
Регистрация: 28.8.2007
Где: Дублин, Ирландия

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



Цитата(DCamer @  7.6.2011,  20:16 Найти цитируемый пост)
Перебор работает, и почему, то пишет List index out of bounds (3), он что ли ищет четвёртый узел...

Видимо да. А чему у вас равен n?

Цитата(DCamer @  7.6.2011,  20:16 Найти цитируемый пост)
А трансформация, почему, то вызывает «Access violation at address 00459981 in module 'smee.exe'. Write of address 0053378D.»

На какой строке?

PM MAIL   Вверх
DCamer
Дата 8.6.2011, 18:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



Цитата(xvr @  7.6.2011,  23:28 Найти цитируемый пост)
Видимо да. А чему у вас равен n?

Что-то я про эту переменную забыл, исправил. Спасибо. smile
Цитата(xvr @  7.6.2011,  23:28 Найти цитируемый пост)
На какой строке?

Проверка точкой останова указала на:
Код

nnm = nodElement->GetNodeName();

--------------------
Нуб!   Windows 7 Ultimate x64, Embarcadero RAD Studio 2010 - C++Builder 2010
PM MAIL   Вверх
xvr
Дата 8.6.2011, 21:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 7046
Регистрация: 28.8.2007
Где: Дублин, Ирландия

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



У вас счетчик извлекается из nodRoot, а элементы из nodtRoot
Кроме того, то  xslt, который я приводил, кладет элементы прямо в сам XMLDocument, а не в корневой узел. Т.е. он формирует XML-Fragment, а не нормальный XML-Document. Я не знаю, как будет себя чувствовать IXMLDocument с такими данными. Подправьте MaterialEffects.xsl

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


Бывалый
*


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

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



Цитата(xvr @  8.6.2011,  22:59 Найти цитируемый пост)
У вас счетчик извлекается из nodRoot, а элементы из nodtRoot

Это я знаю, но результатов нет.
Цитата(xvr @  8.6.2011,  22:59 Найти цитируемый пост)
Подправьте MaterialEffects.xsl

Коим образом? Добавив корневой элемент? Не помогает.
--------------------
Нуб!   Windows 7 Ultimate x64, Embarcadero RAD Studio 2010 - C++Builder 2010
PM MAIL   Вверх
DCamer
Дата 15.2.2012, 17:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



Подскажите, пожалуйста, каким образом сохранить XML-файл перебором? То есть, есть куча узлов в двух ListView, содержимое каждого ListView добавляется в свой узел в XML-файле. Структура выходного XML-файла такова:
Код

<combinode>
   <treeview1>Узел 1 TreeView 1</treeview1>
   <treeview2>Узел 1 TreeView 2</treeview2>
</combinode>
<combinode>
   <treeview1>Узел 2 TreeView 1</treeview1>
   <treeview2>Узел 2 TreeView 2</treeview2>
</combinode>

--------------------
Нуб!   Windows 7 Ultimate x64, Embarcadero RAD Studio 2010 - C++Builder 2010
PM MAIL   Вверх
xvr
Дата 16.2.2012, 09:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 7046
Регистрация: 28.8.2007
Где: Дублин, Ирландия

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



Цитата(DCamer @  15.2.2012,  17:52 Найти цитируемый пост)
 Структура выходного XML-файла такова:

Сделайте этому всему корневой узел и сохраняйте. 
Для добавления элемента используется метод типа addElement (или newElement - не помню точно)

PM MAIL   Вверх
DCamer
Дата 17.2.2012, 20:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



Цитата(xvr @  16.2.2012,  10:19 Найти цитируемый пост)
Для добавления элемента используется метод типа addElement (или newElement - не помню точно)

А если программно надо добавить ряд статических узлов? Например:
Код

<Root>
   <xs:schema>
       // любая часть
   </xs:schema>
   <combinode>
      <treeview1>...</treeview1>
      <treeview2>...</treeview2>
   </combinode>
   <combinode>
      <treeview1>...</treeview1>
      <treeview2>...</treeview2>
   </combinode>
<Root>


То есть, добавить рут не беда, но надо всю xs:schema, программно по нодам создавать как-то муторно.

Вот так создать рут не получается:
Код

    IXMLNode *nodRoot = xmldc->DocumentElement;
    _di_IXMLNode nodElement = xmldc->CreateElement("Root", "");
        nodRoot->ChildNodes->Add(nodElement);


Это сообщение отредактировал(а) DCamer - 17.2.2012, 22:33
--------------------
Нуб!   Windows 7 Ultimate x64, Embarcadero RAD Studio 2010 - C++Builder 2010
PM MAIL   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++ Builder"
Rrader

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

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

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

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


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

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


 




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


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

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