Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Чтение XML-документа 
:(
    Опции темы
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   Вверх
Страницы: (4) Все 1 [2] 3 4 
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++ Builder"
Rrader

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

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

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

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


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

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


 




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


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

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