Модераторы: Poseidon, Snowy, bems, MetalFan
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> xml, взять значение 
V
    Опции темы
PalR
Дата 26.4.2009, 12:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Вот такой код
Код

ShowMessage(node.ChildNodes[i].NodeName);

возвращает
NAME

Код

ShowMessage(node.ChildNodes[i].xml);

возвращает
<NAME value="basic-nt/msvcp71.dll"/>

Код

ShowMessage(node.ChildNodes[i].text);

возвращает пустую строку.

Как получить только "basic-nt/msvcp71.dll" без кавычек.

Это сообщение отредактировал(а) PalR - 26.4.2009, 13:09
PM MAIL   Вверх
Лапоть
Дата 26.4.2009, 12:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



Для узла NAME надо взять значение самого атрибута - GetAttribute('value'); Тут где-то по соседству пару дней назад уже обсуждали чтение XML - http://forum.vingrad.ru/index.php?showtopi...t&p=1850193

Это сообщение отредактировал(а) Лапоть - 26.4.2009, 12:59
PM MAIL   Вверх
PalR
Дата 26.4.2009, 13:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Всёравно не понял.  smile 
PM MAIL   Вверх
PalR
Дата 26.4.2009, 14:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Код

ShowMessage(VarToWideStr(node.ChildNodes[i].NodeValue));

возвращает пустую строку.
Чо делать???
PM MAIL   Вверх
Лапоть
Дата 26.4.2009, 16:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



Да где ты этой экзотики набрался? smile Для начала - прицепи кусок самого файла. Откуда я знаю, как ты вообще его читаешь - т.е. откуда появляется node.ChildNodes[i]?
PM MAIL   Вверх
PalR
Дата 26.4.2009, 17:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



xml можно взять здесь
Задача создать список файлов с путём.
Без парсинга я наверно её уже бы решил.

Код

var
   i,k,j : integer;
  node : IXMLNode;
begin
  node := XML1.DocumentElement;
  for I := 0 to node.ChildNodes.Count - 1 do begin
    memo1.Lines.Add(node.ChildNodes[I].NodeName);
    node := node.ChildNodes.Nodes[i];
    memo2.Clear;
    for j := 0 to node.ChildNodes.Count-1 do begin
      memo2.Lines.Add(node.ChildNodes[j].NodeName);
      node := node.ChildNodes.Nodes[j];
      memo3.Clear;
      for k := 0 to node.ChildNodes.Count-1 do begin
        memo3.Lines.Add(node.ChildNodes[k].NodeName);
        ShowMessage(node.ChildNodes[k].NodeName);
        ShowMessage(node.ChildNodes[k].xml);
        ShowMessage(VarToWideStr(node.ChildNodes[k].NodeValue));
        ShowMessage(node.ChildNodes[k].Attributes[node.ChildNodes[k].NodeName]);
        //ShowMessage(node.Attributes[node.ChildNodes[k].NodeName]);
        //memo4.Lines.Add(node.ChildValues[k]);
      end;
      node := node.ParentNode;
    end;
    node := node.ParentNode;
  end;
end;


ShowMessage просто что бы видеть чего происходит  smile 

Это сообщение отредактировал(а) PalR - 26.4.2009, 18:01
PM MAIL   Вверх
Лапоть
Дата 26.4.2009, 18:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



Код

<UPDATE>
  <VERSION value="0.0.0.1"/>
  <NAME value="AntiVir OEM"/>
  <DATE value="Tue Dec 09 08:37:15 2008"/>
  <MODULE NAME="SELFUPDATE">
    <DESTINATION value="%INSTALL_DIR%\;OS=ALL"/>
    <SOURCE value="winwks\ru\"/>
    <FILE>
        <NAME value="basic-nt/avinet.dll"/>
        <FILEMD5 value="3d3e03479a16bf8b80eb8709a1c31b29"/>
        <PEFILEMD5 value="e9acfb006e7bd415315b67bbec2de2f2"/>
        <FILESIZE value="10497"/>
        <ZIPMD5 value="b568854fe3950c8bf53bec898a124b1f"/>
        <ZIPSIZE value="4562"/>
        <OS value="ALL"/>
        <VERSION value="7.0.0.7"/>
    </FILE>
  </MODULE>
  .....
</UPDATE>
Ещё раз иди по ссылке и читай!
Кроме того, вот твой код
Код

    for j := 0 to node.ChildNodes.Count-1 do begin        // первый раз ты читаешь узел этого уровня
      memo2.Lines.Add(node.ChildNodes[j].NodeName);
      node := node.ChildNodes.Nodes[j];                        // а тут ты этот узел меняешь!

Не экономь на ловле блох! Создай столько переменных (node0 (root), node1...nodeN), сколько у тебя уровней в XML'е. И читай не мифические NodeValue, а именованные атрибуты! Там всё это есть!
А писать код за тебя я не буду.

Это сообщение отредактировал(а) Лапоть - 26.4.2009, 18:20
PM MAIL   Вверх
PalR
Дата 26.4.2009, 18:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Это черновик, как ты понимаешь.
В оригинале будет ещё с рекурсией.
Объясни зачем плодить переменные?
И тот код ни чем по сути от моего не отличается.

Код

var i,k,j,l  : integer;
    node     : IXMLNode;
begin
  node := XML1.DocumentElement;
  for i := 0 to node.ChildNodes.Count - 1 do begin
    memo1.Lines.Add(node.ChildNodes[i].NodeName);
    node := node.ChildNodes.Nodes[i];                             // а тут я этот узел меняю!
    memo2.Clear;
    for j := 0 to node.ChildNodes.Count-1 do begin
      memo2.Lines.Add(node.ChildNodes[j].NodeName);
      node := node.ChildNodes.Nodes[j];                           // и опять меняю!
      memo3.Clear;
      memo4.Clear;
      for k := 0 to node.ChildNodes.Count-1 do begin
        memo3.Lines.Add(node.ChildNodes[k].NodeName);
        node := node.ChildNodes.Nodes[k];                        // и снова меняю!
        if node.ChildNodes.Count = 0 then begin                // это просто так, типа дошли до конца
          memo4.Lines.Add(node.Attributes['value']);
          //ShowMessage(node.NodeName);
          //ShowMessage(node.xml);
          ShowMessage(node.Attributes['value']);               // а здесь спасибо, хотя node.text тоже должно было бы работать
        end;
        node := node.ParentNode;                                      // а тут возвращаюсь к родителю
      end;
      node := node.ParentNode;                                        // и тут
    end;
    node := node.ParentNode;                                          // и здесь
  end;
end;

я ошибочно считал что NAME -это атрибут, а это тоже узел, а атрибут -value
теперь буду рекурсию прикручивать

Это сообщение отредактировал(а) PalR - 26.4.2009, 23:02
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Общие вопросы"
SnowyMetalFan
bemsPoseidon
Rrader

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

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

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

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


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

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


 




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


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

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