Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
Форум программистов > C++ Builder > Чтение XML-документа |
Автор: DCamer 25.11.2010, 16:45 | ||
Как сделать чтение XML-документа, а именно опций узлов:
Про встроенную компоненту TXMLDocument в курсе, но не знаю как с компонентой работать. |
Автор: bsa 25.11.2010, 16:47 |
http://lmgtfy.com/?q=TXMLDocument знает и готов поделиться! |
Автор: DCamer 25.11.2010, 16:53 |
В пресловутом гугле решений под C++Builder практически нет, а если и есть, то не то, что нужно. |
Автор: bsa 25.11.2010, 17:12 |
http://forum.developing.ru/showthread.php?2289-TXMLDocument-C-Builder |
Автор: DCamer 25.11.2010, 17:25 | ||
У меня выдаёт последний код, что какая-то ошибка на строке 1, видимо речь о XML-файле:
|
Автор: DCamer 25.11.2010, 18:46 | ||
Вот что собственно надо: http://s2.itrash.ru/idb/e20d3a3d54f79ff3494cfbc937f6fdcb/omaterialeffects.png.htm Да, кстати в XML-файле нету этого:
|
Автор: bsa 25.11.2010, 19:06 |
А если добавить эту строку, будет исключение? Кстати, обрати внимание, что по приведенной ссылке работа с TXMLDocument была внутри блока try{}catch, думаю, неспроста. |
Автор: DCamer 25.11.2010, 21:28 | ||
Эта ошибка - нет, но появляется новая ошибка:
|
Автор: bsa 27.11.2010, 11:12 |
DCamer, и в каком месте появляется? Пройдись отладчиком! Тут телепатов нет. |
Автор: DonPager 7.12.2010, 01:09 |
DCamer, ... и укажи версию билдера (в ХЕ немножко поменялся код для хмл) |
Автор: DCamer 10.1.2011, 17:42 |
DonPager, версия билдера у меня в подписи. ![]() |
Автор: DCamer 10.1.2011, 18:12 | ||
bsa, отладчик при Break ссылается на System.pas:
|
Автор: Isko 10.1.2011, 18:39 |
Могу скинуть кусок проги где у меня происходит чтение узлов и значенийю Правда у меня не опции а всего лишь одно значение для каждого узла. |
Автор: DCamer 10.1.2011, 18:55 |
Isko, скинь коль не жалко. ![]() |
Автор: DCamer 10.1.2011, 20:28 | ||
Всем спасибо, все свободны. ![]()
|
Автор: DCamer 10.1.2011, 22:02 |
А как считать XML-файл, такого вида, который создаёт MS Office? |
Автор: oldcode 10.1.2011, 23:45 | ||||
что ? нет ответа ? так ты же сам сказал :
|
Автор: DCamer 11.1.2011, 14:01 |
oldcode, что-то я не помню такого, чтоб в течении часа отвечали. ![]() |
Автор: oldcode 12.1.2011, 12:00 |
уж который час пошел... |
Автор: DCamer 12.1.2011, 13:28 |
Уж который раз я так пишу... |
Автор: oldcode 12.1.2011, 14:07 | ||||
Добавлено @ 14:12
Если да , то переименуй .docx в .hml или в другое любое немыслимое расширение ;) и нажми Key(13) ![]() |
Автор: DCamer 27.2.2011, 23:29 |
Если вам нечего сказать по делу, не говорите ничего. Но я говорил про XML-файл, который не имеет стандартной структуры тегов, а состоит из Workbook. |
Автор: xvr 28.2.2011, 17:33 | ||
С какого перепугу он вдруг 'не имеет стандартной структуры тегов'? Вполне стандартные xml файлы (и много) |
Автор: DCamer 28.2.2011, 22:08 | ||
В обычной структуре нет такого:
И компонент TXMLDocument не читает его вообще, а если исходить из вашей логики, то оный должны его считывать нормально. |
Автор: xvr 28.2.2011, 22:57 | ||||||
Нормальный фрагмент с xml-namespace'ами
|
Автор: DCamer 6.3.2011, 14:46 |
Да-с, знать бы откуда его взять. |
Автор: xvr 6.3.2011, 19:43 | ||
Из IE вестимо. Читать http://msdn.microsoft.com/en-us/library/ms763742%28v=VS.85%29.aspx и особенно http://msdn.microsoft.com/en-us/library/ms766487%28v=VS.85%29.aspx |
Автор: DCamer 10.4.2011, 14:00 | ||||
Предположим есть такой XML:
Как все их вгрузить в ListBox? Пробовал такой код:
Но, в данном случае, он находит лишь первый узел «Row», и считывает с него данные, но нужно чтобы считывал со всех узлов «Row». |
Автор: DCamer 10.4.2011, 21:14 | ||
Нет. 3 - это Worsheet, 1 - это Table (обычная структура). Далее же идет обращение к Row (ChildNodes->FindNode("Row")). |
Автор: xvr 11.4.2011, 13:05 |
Угу, к ОДНОМУ row, а у вас их несколько. |
Автор: DCamer 30.4.2011, 16:42 |
Не увидел я XSLT-трансформацию негде, к сожалению... |
Автор: srt 1.5.2011, 01:23 |
http://www.sitemaps.org/schemas/sitemap/0.9 ещё можно яндексовый хмл посмотреть но луче сётки w3.org |
Автор: xvr 1.5.2011, 11:00 | ||
В MSDN тоже не было? Там довольно подробно расписано. ( http://msdn.microsoft.com/en-us/library/ms765388%28VS.85%29.aspx ) В вашем случае такой xsl файл :
Вам надо загрузить этот xsl файл в XMLDocument а потом подать его корень в nodRoot->TransformNode На выходе получите XML документ из одних <item> ..</item> |
Автор: srt 1.5.2011, 14:04 |
мастдай форева хоть его все и хают - но там самая подробная инфа лежит |
Автор: DCamer 1.5.2011, 15:51 | ||||||
Странно, вываливается ошибка:
Код:
Да, кстати, относительно XSLT-трансформации: оная позволит записать изменения в XML-файл? |
Автор: srt 1.5.2011, 20:59 |
блин просто напиши echo 'hello world'; если чото получица - напиши:О) Добавлено через 1 минуту и 25 секунд вы чо пацаны - читать разучились?? я в лёгком нифигасебе .. Добавлено через 11 минут и 15 секунд расслабься - ХМЛ не при делах просто ты со своим провом не до... говорился :О) Добавлено через 11 минут и 54 секунды на самом деле достаточно просто масива .. |
Автор: DCamer 1.5.2011, 23:44 |
На самом деле массив идёт дальше, т.к. в массиве идёт само заполнение компонент содержимым XML-файла. Ну вот и пиши код PHP в приложении C++. ![]() |
Автор: srt 2.5.2011, 01:36 |
запросто хмл это разбор в а потом разбор из массив проще хоть си хоть пыхыпы .. |
Автор: xvr 2.5.2011, 09:49 | ||||
Ему еще надо подать куда выводить:
Угу, 2я разновидность вызова |
Автор: DCamer 9.5.2011, 20:54 |
А как впоследствии все эти итемы вгрузить в ListBox? Что не пытаюсь сделать — везде та же структура остаётся. |
Автор: xvr 9.5.2011, 22:27 |
Обойти как обычный (но одноуровневый) XMLDocument Что то не так делаете - покажите код |
Автор: DCamer 10.5.2011, 14:41 | ||
|
Автор: xvr 10.5.2011, 17:08 |
Неправильно. 2м параметром надо подать чистый XMLDoc, в него и будут занесены результаты трансформации |
Автор: DCamer 6.6.2011, 22:27 |
Интересно, и как все эти item вгрузить? |
Автор: xvr 7.6.2011, 12:29 | ||
Ну собственно так, как вы и грузили - перебором элементов в Document'е. Только вам не придется заниматься сканированием иерархии Document'а - они все будут лежать прямо в корне |
Автор: DCamer 7.6.2011, 20:16 | ||||
Перебор работает, и почему, то пишет List index out of bounds (3), он что ли ищет четвёртый узел...
А трансформация, почему, то вызывает «Access violation at address 00459981 in module 'smee.exe'. Write of address 0053378D.»
|
Автор: xvr 7.6.2011, 22:28 | ||||
Видимо да. А чему у вас равен n?
На какой строке? |
Автор: DCamer 8.6.2011, 18:36 | ||
Что-то я про эту переменную забыл, исправил. Спасибо. ![]() Проверка точкой останова указала на:
|
Автор: xvr 8.6.2011, 21:59 |
У вас счетчик извлекается из nodRoot, а элементы из nodtRoot Кроме того, то xslt, который я приводил, кладет элементы прямо в сам XMLDocument, а не в корневой узел. Т.е. он формирует XML-Fragment, а не нормальный XML-Document. Я не знаю, как будет себя чувствовать IXMLDocument с такими данными. Подправьте MaterialEffects.xsl |
Автор: DCamer 8.6.2011, 22:41 |
Это я знаю, но результатов нет. Коим образом? Добавив корневой элемент? Не помогает. |
Автор: DCamer 15.2.2012, 17:52 | ||
Подскажите, пожалуйста, каким образом сохранить XML-файл перебором? То есть, есть куча узлов в двух ListView, содержимое каждого ListView добавляется в свой узел в XML-файле. Структура выходного XML-файла такова:
|
Автор: xvr 16.2.2012, 09:19 |
Сделайте этому всему корневой узел и сохраняйте. Для добавления элемента используется метод типа addElement (или newElement - не помню точно) |
Автор: DCamer 17.2.2012, 20:27 | ||||||
А если программно надо добавить ряд статических узлов? Например:
То есть, добавить рут не беда, но надо всю xs:schema, программно по нодам создавать как-то муторно. Вот так создать рут не получается:
|