Поиск:

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


Бывалый
*


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

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



Как сделать чтение XML-документа, а именно опций узлов:
Код

<rootnode>
    <subnode option="test">
        <subsubnode option1="test1" option2="subtest" option3="1" option4="1" option5="1"/>
        <subsubnode option1="test3" option2="subtest"/>
    </subnode>
</rootnode>

Про встроенную компоненту TXMLDocument в курсе, но не знаю как с компонентой работать.

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


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 9185
Регистрация: 6.4.2006
Где: Москва, Россия

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



гугл знает и готов поделиться!
PM   Вверх
DCamer
Дата 25.11.2010, 16:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



В пресловутом гугле решений под C++Builder практически нет, а если и есть, то не то, что нужно.
--------------------
Нуб!   Windows 7 Ultimate x64, Embarcadero RAD Studio 2010 - C++Builder 2010
PM MAIL   Вверх
bsa
Дата 25.11.2010, 17:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 9185
Регистрация: 6.4.2006
Где: Москва, Россия

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



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


Бывалый
*


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

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



У меня выдаёт последний код, что какая-то ошибка на строке 1, видимо речь о XML-файле:
Код

First chance exception at $7C812AFB. Exception class EDOMParseError with message
'Системная ошибка: -2146697210.

Line: 0
'.
Process smee.exe (416)



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


Бывалый
*


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

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



Вот что собственно надо:
user posted image
Да, кстати в XML-файле нету этого:
Код

<?xml version="1.0" encoding="iso-8859-1" ?>


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


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 9185
Регистрация: 6.4.2006
Где: Москва, Россия

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



А если добавить эту строку, будет исключение?
Кстати, обрати внимание, что по приведенной ссылке работа с TXMLDocument была внутри блока try{}catch, думаю, неспроста.
PM   Вверх
DCamer
Дата 25.11.2010, 21:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



Эта ошибка - нет, но появляется новая ошибка:
Код

Warning: Invalid pointer operation

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


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 9185
Регистрация: 6.4.2006
Где: Москва, Россия

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



DCamer, и в каком месте появляется? Пройдись отладчиком! Тут телепатов нет.
PM   Вверх
DonPager
Дата 7.12.2010, 01:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Колдырь
**


Профиль
Группа: Участник
Сообщений: 327
Регистрация: 28.3.2003
Где: Воронеж

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



DCamer, ... и укажи версию билдера (в ХЕ немножко поменялся код для хмл)



--------------------
кодер + лодырь = колдырь
PM MAIL ICQ Skype GTalk   Вверх
DCamer
Дата 10.1.2011, 17:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



DonPager, версия билдера у меня в подписи. smile 
--------------------
Нуб!   Windows 7 Ultimate x64, Embarcadero RAD Studio 2010 - C++Builder 2010
PM MAIL   Вверх
DCamer
Дата 10.1.2011, 18:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



bsa, отладчик при Break ссылается на System.pas:
Код

procedure TObject.FreeInstance;
begin
  CleanupInstance;
  _FreeMem(Self);        // курсор переходит на эту строку
end;

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


Новичок



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

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



Могу скинуть кусок проги где у меня происходит чтение узлов и значенийю
Правда у меня не опции а всего лишь одно значение для каждого узла.
PM MAIL   Вверх
DCamer
Дата 10.1.2011, 18:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



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


Бывалый
*


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

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



Всем спасибо, все свободны.  smile 
Код

      AnsiString value,nm;
    int n;
    _di_IXMLDocument XMLDocument = NewXMLDocument();
    try {
        XMLDocument->XML->Text="<SurfaceTypes><SurfaceType name=\"mat_oil_drops\"></SurfaceType></SurfaceTypes>";
        XMLDocument->Active=true;
        XMLDocument->Encoding="UTF-16";
        XMLDocument->Options=XMLDocument->Options << doNodeAutoIndent;
        IXMLNode *nodRoot= XMLDocument->DocumentElement;
        IXMLNode *nodElement;
        n=nodRoot->ChildNodes->Count;
        for (int i = 0; i < n; i++) {
            nodElement = nodRoot->ChildNodes->Nodes[i];
            value= nodElement->GetAttribute("name");
            nm = nodElement->GetNodeName();
            Edit3->Text = value;
        }
    }
    __finally { delete XMLDocument;}


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


Бывалый
*


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

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



А как считать XML-файл, такого вида, который создаёт MS Office?
--------------------
Нуб!   Windows 7 Ultimate x64, Embarcadero RAD Studio 2010 - C++Builder 2010
PM MAIL   Вверх
oldcode
Дата 10.1.2011, 23:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Цитата(DCamer @ 10.1.2011,  22:02)
А как считать XML-файл, такого вида, который создаёт MS Office?

что ? нет ответа ? так ты же сам сказал : 
Цитата(DCamer)
Всем спасибо, все свободны.
 - что звучало довольно таки , как бы это мягче сказать, не красиво.

Это сообщение отредактировал(а) oldcode - 11.1.2011, 03:08
PM MAIL   Вверх
DCamer
Дата 11.1.2011, 14:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



oldcode, что-то я не помню такого, чтоб в течении часа отвечали. smile 

Это сообщение отредактировал(а) DCamer - 11.1.2011, 14:02
--------------------
Нуб!   Windows 7 Ultimate x64, Embarcadero RAD Studio 2010 - C++Builder 2010
PM MAIL   Вверх
oldcode
Дата 12.1.2011, 12:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



уж который час пошел...
PM MAIL   Вверх
DCamer
Дата 12.1.2011, 13:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



Уж который раз я так пишу...
--------------------
Нуб!   Windows 7 Ultimate x64, Embarcadero RAD Studio 2010 - C++Builder 2010
PM MAIL   Вверх
oldcode
Дата 12.1.2011, 14:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Цитата(DCamer)
Уж который раз я так пишу...
 "А Германа все нет..." ( (С) А. С. Пушкинд.)

Добавлено @ 14:12
Цитата(DCamer @ 10.1.2011 @   22:02)
А как считать XML-файл, такого вида, который создаёт MS Office?
 - это ты про .docx ?
Если да , то переименуй .docx в .hml или в другое любое немыслимое расширение ;) и нажми Key(13)  smile ...

Это сообщение отредактировал(а) oldcode - 12.1.2011, 14:52
PM MAIL   Вверх
DCamer
Дата 27.2.2011, 23:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



Если вам нечего сказать по делу, не говорите ничего.
Но я говорил про XML-файл, который не имеет стандартной структуры тегов, а состоит из Workbook.
--------------------
Нуб!   Windows 7 Ultimate x64, Embarcadero RAD Studio 2010 - C++Builder 2010
PM MAIL   Вверх
xvr
Дата 28.2.2011, 17:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

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



Цитата(DCamer @ 27.2.2011,  23:29)
Но я говорил про XML-файл, который не имеет стандартной структуры тегов, а состоит из Workbook.

С какого перепугу он вдруг 'не имеет стандартной структуры тегов'? Вполне стандартные xml файлы (и много)

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


Бывалый
*


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

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



В обычной структуре нет такого:
Код

<Cell ss:StyleID="s37"><Data ss:Type="String">текст в ячейке</Data></Cell>

И компонент TXMLDocument не читает его вообще, а если исходить из вашей логики, то оный должны его считывать нормально.
--------------------
Нуб!   Windows 7 Ultimate x64, Embarcadero RAD Studio 2010 - C++Builder 2010
PM MAIL   Вверх
xvr
Дата 28.2.2011, 22:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

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



Цитата(DCamer @ 28.2.2011,  22:08)
В обычной структуре нет такого:
Код

<Cell ss:StyleID="s37"><Data ss:Type="String">текст в ячейке</Data></Cell>


Нормальный фрагмент с xml-namespace'ами
Цитата

И компонент TXMLDocument не читает его вообще, а если исходить из вашей логики, то оный должны его считывать нормально.
Должен. Если не читает - то это проблема TXMLDocument'а. Возможно он не поддерживает xml namespace'ы. Тогда возьмите нормальный парсер (MSXML например)

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


Бывалый
*


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

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



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


Эксперт
****


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

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



Цитата(DCamer @ 6.3.2011,  14:46)
Да-с, знать бы откуда его взять.

Из IE вестимо. Читать тут и особенно тут
PM MAIL   Вверх
DCamer
Дата 10.4.2011, 14:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



Предположим есть такой XML:
Код

<Column ss:StyleID="s21" ss:AutoFitWidth="0" ss:Width="192.75" ss:Span="2"/>
<Row ss:AutoFitHeight="0" ss:StyleID="s29">
  <Cell ss:StyleID="s37"><Data ss:Type="String">текст в ячейке</Data></Cell>
  <Cell ss:StyleID="s28"><Data ss:Type="String">текст в ячейке</Data></Cell>
  <Cell ss:StyleID="s26"><Data ss:Type="String">текст в ячейке</Data></Cell>
  <Cell><Data ss:Type="String">текст в ячейке</Data></Cell>
  <Cell><Data ss:Type="String">текст в ячейке</Data></Cell>
</Row>
<Row ss:AutoFitHeight="0" ss:StyleID="s24">
  <Cell ss:StyleID="s37"><Data ss:Type="String">текст в ячейке</Data></Cell>
  <Cell ss:StyleID="s28"><Data ss:Type="String">текст в ячейке</Data></Cell>
  <Cell ss:StyleID="s26"><Data ss:Type="String">текст в ячейке</Data></Cell>
  <Cell><Data ss:Type="String">текст в ячейке</Data></Cell>
  <Cell><Data ss:Type="String">текст в ячейке</Data></Cell>
</Row>

Как все их вгрузить в ListBox?
Пробовал такой код:
Код

      AnsiString values,nms,vals;
    _di_IXMLDocument XMLDoc = NewXMLDocument();
    try {
        XMLDoc->LoadFromFile(fp+"\\s.xml");
        XMLDoc->Active=true;
        XMLDoc->Encoding="UTF-16";
        XMLDoc->Options=XMLDoc->Options << doNodeAutoIndent;
        IXMLNode *nodRoot= XMLDoc->DocumentElement;
        IXMLNode *nodElement;
        n=nodRoot->ChildNodes->Count;
        for (int i = 0; i < n; i++) {
            nodElement = nodRoot->ChildNodes->Nodes[3]->ChildNodes->Nodes[1]->ChildNodes->FindNode("Row")->ChildNodes->Nodes[i]->ChildNodes->FindNode("Data");
            nms = nodElement->GetNodeValue();
            eff->Items->Add(nms);
            }
    }
    __finally { delete XMLDoc;}

Но, в данном случае, он находит лишь первый узел «Row», и считывает с него данные, но нужно чтобы считывал со всех узлов «Row».

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


Эксперт
****


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

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



Цитата(DCamer @  10.4.2011,  14:00 Найти цитируемый пост)
            nodElement = nodRoot->ChildNodes->Nodes[3]->ChildNodes->Nodes[1]->ChildNodes->FindNode("Row")->ChildNodes->Nodes[i]->ChildNodes->FindNode("Data");

Ой, мама, роди меня обратно!  smile При разборе XML крайне не рекомендуется пользоваться абсолютными индексами в узлах. Формат XML достаточно гибок, что бы добавить парочку узлов, и все ваши индексы поедут  smile 
В вашем случае напрашивается использование XPath. 
Там есть нечто называемое IXMLNode::TransformNode - это XSLT трансформация. Можете воспользоваться ею

Цитата(DCamer @  10.4.2011,  14:00 Найти цитируемый пост)
Но, в данном случае, он находит лишь первый узел «Row»

Еще бы, вы же ему явно сказали 
Цитата

nodRoot->ChildNodes->Nodes[3]->ChildNodes->Nodes[1]->ChildNodes->FindNode("Row")
это явно выделенный 1 узел Row

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


Бывалый
*


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

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



Цитата(xvr @  10.4.2011,  19:28 Найти цитируемый пост)
nodRoot->ChildNodes->Nodes[3]->ChildNodes->Nodes[1]->ChildNodes->FindNode("Row")
это явно выделенный 1 узел Row

Нет. 3 - это Worsheet, 1 - это Table (обычная структура). Далее же идет обращение к Row (ChildNodes->FindNode("Row")).
--------------------
Нуб!   Windows 7 Ultimate x64, Embarcadero RAD Studio 2010 - C++Builder 2010
PM MAIL   Вверх
xvr
Дата 11.4.2011, 13:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

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



Цитата(DCamer @  10.4.2011,  21:14 Найти цитируемый пост)
Далее же идет обращение к Row

Угу, к ОДНОМУ row, а у вас их несколько.

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


Бывалый
*


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

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



Не увидел я XSLT-трансформацию негде, к сожалению...
--------------------
Нуб!   Windows 7 Ultimate x64, Embarcadero RAD Studio 2010 - C++Builder 2010
PM MAIL   Вверх
srt
Дата 1.5.2011, 01:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



http://www.sitemaps.org/schemas/sitemap/0.9
ещё можно яндексовый хмл посмотреть
но луче сётки w3.org

Это сообщение отредактировал(а) srt - 1.5.2011, 01:25
PM MAIL   Вверх
xvr
Дата 1.5.2011, 11:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

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



Цитата(DCamer @  30.4.2011,  16:42 Найти цитируемый пост)
Не увидел я XSLT-трансформацию негде, к сожалению... 

В MSDN тоже не было? Там довольно подробно расписано. ( http://msdn.microsoft.com/en-us/library/ms...28VS.85%29.aspx )

В вашем случае такой xsl файл :
Код

<?xml version="1.0"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
  <xsl:template match="Cell">
        <item>
          <xsl:value-of select="Data"/>
        </item>
  </xsl:template>
</xsl:stylesheet>
Извлечет все Data вложенные в Cell и сделает из них плоский список xml тэгов item
Вам надо загрузить этот xsl файл в XMLDocument а потом подать его корень в nodRoot->TransformNode
На выходе получите XML документ из одних <item> ..</item>


Это сообщение отредактировал(а) xvr - 1.5.2011, 11:01
PM MAIL   Вверх
srt
Дата 1.5.2011, 14:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



мастдай форева
хоть его все и хают - но там самая подробная инфа лежит
PM MAIL   Вверх
DCamer
Дата 1.5.2011, 15:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



Цитата(xvr @  1.5.2011,  12:00 Найти цитируемый пост)
Вам надо загрузить этот xsl файл в XMLDocument а потом подать его корень в nodRoot->TransformNode

Странно, вываливается ошибка:
Код

[BCC32 Error] sme.cpp(85): E2285 Could not find a match for 'IXMLNode::TransformNode(IXMLNode *)'

Код:
Код

        XMLDoc->LoadFromFile(fp+"\\xmlfile.xml");
        XMLDoc->Active=true;
        XSLDoc->LoadFromFile(fp+"\\xmlfile.xsl");
        XSLDoc->Active=true;
        IXMLNode *nodRoot= XMLDoc->DocumentElement;
        IXMLNode *xslnodRoot= XSLDoc->DocumentElement;
        nodRoot->TransformNode(xslnodRoot); // строка 85

Да, кстати, относительно XSLT-трансформации: оная позволит записать изменения в XML-файл?

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


Шустрый
*


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

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



блин просто напиши echo 'hello world';
если чото получица - напиши:О)

Добавлено через 1 минуту и 25 секунд
вы чо пацаны - читать разучились??
я в лёгком нифигасебе ..

Добавлено через 11 минут и 15 секунд
расслабься - ХМЛ не при делах
просто ты со своим провом не до... говорился  :О)

Добавлено через 11 минут и 54 секунды
на самом деле достаточно просто масива ..
PM MAIL   Вверх
DCamer
Дата 1.5.2011, 23:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



Цитата(srt @  1.5.2011,  21:59 Найти цитируемый пост)
на самом деле достаточно просто масива .. 

На самом деле массив идёт дальше, т.к. в массиве идёт само заполнение компонент содержимым XML-файла.

Цитата(srt @  1.5.2011,  21:59 Найти цитируемый пост)
блин просто напиши echo 'hello world';

Ну вот и пиши код PHP в приложении C++.  smile

Это сообщение отредактировал(а) DCamer - 1.5.2011, 23:45
--------------------
Нуб!   Windows 7 Ultimate x64, Embarcadero RAD Studio 2010 - C++Builder 2010
PM MAIL   Вверх
srt
Дата 2.5.2011, 01:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



запросто
хмл это разбор в
а потом разбор из
массив проще
хоть си хоть пыхыпы
..
PM MAIL   Вверх
xvr
Дата 2.5.2011, 09:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

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



Цитата(DCamer @  1.5.2011,  15:51 Найти цитируемый пост)
Странно, вываливается ошибка:

Ему еще надо подать куда выводить:
Код

    virtual void __fastcall TransformNode(const _di_IXMLNode stylesheet, WideString &output) = 0 /* overload */;
    virtual void __fastcall TransformNode(const _di_IXMLNode stylesheet, const _di_IXMLDocument output) = 0 /* overload */;

Цитата(DCamer @  1.5.2011,  15:51 Найти цитируемый пост)
Да, кстати, относительно XSLT-трансформации: оная позволит записать изменения в XML-файл?

Угу, 2я разновидность вызова

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


Бывалый
*


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

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



Цитата(xvr @  1.5.2011,  12:00 Найти цитируемый пост)
На выходе получите XML документ из одних <item> ..</item>

А как впоследствии все эти итемы вгрузить в ListBox? Что не пытаюсь сделать — везде та же структура остаётся.
--------------------
Нуб!   Windows 7 Ultimate x64, Embarcadero RAD Studio 2010 - C++Builder 2010
PM MAIL   Вверх
xvr
Дата 9.5.2011, 22:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

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



Цитата(DCamer @  9.5.2011,  20:54 Найти цитируемый пост)
А как впоследствии все эти итемы вгрузить в ListBox?

Обойти как обычный (но одноуровневый) XMLDocument

Цитата(DCamer @  9.5.2011,  20:54 Найти цитируемый пост)
Что не пытаюсь сделать — везде та же структура остаётся.

Что то не так делаете - покажите код

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


Бывалый
*


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

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



Цитата(xvr @  9.5.2011,  23:27 Найти цитируемый пост)
Что то не так делаете - покажите код

Код

      AnsiString values,nms,vals;
      WideString nnm;
    _di_IXMLDocument XMLDoc = NewXMLDocument();
    _di_IXMLDocument XMLDocbn = NewXMLDocument();
    try {
        XMLDoc->LoadFromFile(fp+"\\MaterialEffects.xml");
        XMLDoc->Active=true;
        XMLDoc->Options=XMLDoc->Options << doNodeAutoIndent;
        XMLDocbn->LoadFromFile(fp+"\\MaterialEffects.xsl");
        XMLDocbn->Active=true;
        XMLDocbn->Options=XMLDocbn->Options << doNodeAutoIndent;
        IXMLNode *nodRoot= XMLDoc->DocumentElement;
        IXMLNode *xslnodRoot= XMLDocbn->DocumentElement;
        nodRoot->TransformNode(xslnodRoot, XMLDoc);
        IXMLNode *nodTable;
        IXMLNode *nodElement;
        n=nodRoot->ChildNodes->Count;
        for (int i = 0; i < n; i++) {
            nodElement = nodRoot->ChildNodes->Nodes[i];
            nnm = nodElement->GetText();
            Memo1->Lines->SetText(WideString(nms).c_bstr());
            }
    }

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


Эксперт
****


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

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



Цитата(DCamer @  10.5.2011,  14:41 Найти цитируемый пост)
nodRoot->TransformNode(xslnodRoot, XMLDoc);

Неправильно. 2м параметром надо подать чистый XMLDoc, в него и будут занесены результаты трансформации

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


Бывалый
*


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

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



Интересно, и как все эти item вгрузить?
--------------------
Нуб!   Windows 7 Ultimate x64, Embarcadero RAD Studio 2010 - C++Builder 2010
PM MAIL   Вверх
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.2355 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


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

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