Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2013.09.01;
Скачать: CL | DM;

Вниз

XLMDocumnet пройтись по всем нодам.   Найти похожие ветки 

 
Den   (2012-12-18 18:45) [0]

В общем есть XML документ в нем ноды есть, у некоторых нод есть чайлд ноды, как пройтись по всем нодам в цикле? Тоесть чтоб цикл зашел в каждую и прочитал значение атрибута name к примеру?


 
Плохиш ©   (2012-12-18 18:48) [1]

Цикл + Рекурсия


 
Медвежонок Пятачок ©   (2012-12-18 18:51) [2]

xdoc.selectNodes("//*"); + просто цикл без рекурсии

Но только не TXMLDocument.
Он упрощенный. Для дошколят.


 
Медвежонок Пятачок ©   (2012-12-18 19:01) [3]

type
TXMLNodeEnumCallBack = function(iNode : IXMLDOMNode; var bMore : boolean; ACustomData : Pointer) : boolean of object;

function xml_EnumXMLDOMNodeList(iBaseNode : IXMLDOMNode; const AXPath : string; ACallback : TXMLNodeEnumCallBack; ACustomData : Pointer) : integer;
var bMore : boolean; i : integer; iList : IXMLDOMNodeList;
begin
Result := 0; bMore := True;
if (iBaseNode <> nil) then
 begin
  iList := iBaseNode.selectNodes(AXPath);
  if (iList <> nil) and (iList.length > 0) and Assigned(ACallBack)then
   begin
    for i := 0 to Pred(iList.length) do
     begin
      if ACallback(iList.item[i],bMore,ACustomData) then Inc(Result);
      if not bMore then Break;
     end;
   end;
 end;
end;


 
Den   (2012-12-18 19:02) [4]

Рекурсия.... ктото может на пальцах обяснить как это должно работать? К примеру есть дерево из нодов, они одинаковые, как рекурсия будет знать что эту ноду к примеру уже проходили? Это надо же чтото записывать о ней типа сюда не ходи тут уже были.. А че записывать то? В html sourceindex есть это уникальный номер элемента в таблице, а тут как?

Медвежонок Пятачок спасибо буду юзать этот вариант но с рекурсией хочу понять всетаки как оно работает. Ответ типа - чтоб понять принцып рекурсии, нужно понять принцып рекурсии, не предлагать:)


 
Den   (2012-12-18 19:03) [5]

ага! Пока пост сочинял уже есть то что я хотел понять.


 
brother ©   (2012-12-18 19:05) [6]

http://www.stihi.ru/pics/2009/09/20/4211.jpg
а еще точнее:
http://borlpasc.narod.ru/docym/recyr.htm


 
Медвежонок Пятачок ©   (2012-12-18 19:09) [7]

Рекурсия.... ктото может на пальцах обяснить как это должно работать?

не слушай плохиша.
он тебя плохому научит.


 
Медвежонок Пятачок ©   (2012-12-18 19:22) [8]

uses ComObj;

...

var xdoc,xlist : OleVariant; i : integer;
begin
xdoc := CreateOleObject("Msxml2.DOMDocument");
xdoc.loadXML("<root><вася/><петя/><маша><глаша/></маша></root>");
xlist := xdoc.selectNodes("//*");
for i := 0 to Pred(integer(xlist.length)) do ShowMessage("Здравствуйте, я узел " + xlist.item[i].nodeName);
end;


 
Den   (2012-12-18 19:34) [9]

Медвежонок Пятачок не да спасибо, я просто заодно с этим разобраться хотел, никак не могу понять как оно работает, сижу вот пошагово смотрю по f8 как оно фурычит может дойдет наконец

Procedure GetDirList(InitialDir:String; DirList:TStrings);
Var
Info:TSearchRec;
InitialDirPartOne,InitialDirPartTwo :string;
Begin
InitialDirPartOne:=InitialDir + "\*.";
If FindFirst(InitialDirPartOne, faDirectory, Info) = 0 Then Begin
If (Info.Name <> ".") And (Info.Name <> "..") Then Begin
InitialDirPartTwo:=InitialDir + "\" + Info.Name;
DirList.Add(InitialDirPartTwo);
GetDirList(InitialDirPartTwo, DirList);
End;

While FindNext(Info) = 0 Do
If (Info.Name <> ".") And (Info.Name <> "..") Then Begin
InitialDirPartTwo:=InitialDir + "\" + Info.Name;
DirList.Add(InitialDirPartTwo);
GetDirList(InitialDirPartTwo, DirList);
End
End;
FindClose(Info)
End;


 
Медвежонок Пятачок ©   (2012-12-18 19:55) [10]

не знаю зачем тебе ф8 для понимания рекурсии.

достаточно рассмотреть один единственный иф и все.

если <что-то> зен функция вызывает саму себя.


 
Den   (2012-12-18 20:10) [11]

Я понимаю что она сама себя вызывает, моя не понимать как она по всем папкам идет и не зацикливается на одной левой ветке дерева. Онаж должна знать как-то что вот эту дерикторию отметили всю, больше там нечего делать, надо смотреть в другую, если она есть и так далее.


 
RWolf ©   (2012-12-18 20:45) [12]

она и знает — всё на стеке лежит.


 
Медвежонок Пятачок ©   (2012-12-18 20:58) [13]

как она по всем папкам идет и не зацикливается на одной левой ветке дерева

чо, и цикл файндфёста/файнднекста непонятен?
так это к рекурсии не имеет отношения.

Вот простейшая рекурсивная функция :

function sample : integer;
begin
result := 1;
if <еще_не_обед> then result := result + sample;
end;


 
Den   (2012-12-19 01:29) [14]

она и знает — всё на стеке лежит. - как посмотреть на это в дэлфи? ну то есть - чтоб вот передо мной стек был, я кнопку нажимал и видел один шаг того как оно это все делает?


 
Styx   (2012-12-19 02:06) [15]

Ну так в отладчике всё есть, так и проходите...


 
Плохиш ©   (2012-12-19 02:32) [16]


> Den   (18.12.12 20:10) [11]
> Я понимаю что она сама себя вызывает, моя не понимать как
> она по всем папкам идет и не зацикливается на одной левой
> ветке дерева.

Вот это ни на какие мысли не наводит?

> InitialDirPartTwo:=InitialDir + "\" + Info.Name;


 
Den   (2012-12-19 03:17) [17]

attributeList: Ixmldomnamednodemap; вот на это пишет Undeclared identifier: "Ixmldomnamednodemap" чего ему не хватает?


 
sniknik ©   (2012-12-19 08:02) [18]

> attributeList: Ixmldomnamednodemap; вот на это пишет Undeclared identifier: "Ixmldomnamednodemap" чего ему не хватает?
перевести не пробовал? пишет же прямым текстом ответ на твой вопрос.


 
Медвежонок Пятачок ©   (2012-12-19 08:47) [19]

ему не хватает юзис.
например MSXML2_TLB.pas


 
Плохиш ©   (2012-12-19 12:06) [20]


> Медвежонок Пятачок ©   (19.12.12 08:47) [19]
> ему не хватает юзис.
> например MSXML2_TLB.pas

99% - следующий вопрос будет "Где его взять?" :-)


 
Медвежонок Пятачок ©   (2012-12-19 12:11) [21]

Сверху пример без модуля.


 
Den   (2012-12-19 16:14) [22]

99% - следующий вопрос будет "Где его взять?" :-) - блин есть короче шоу такое битва экстрасенсов, я думаю у тебя есть неплохие шансы там взять призовое место! Дак де его взять то? вот этот модуль вот MSXML2_TLB ?


 
Медвежонок Пятачок ©   (2012-12-19 16:20) [23]

Сверху пример с поздним связыванием. Без этого модуля.
А как сделать модуль написано в интернетах.
Import Type Library --> create unit


 
Den   (2012-12-19 16:24) [24]

Сверху пример без модуля. - я видел но вкратце че я хочу сделать, есть XML файл как уже было понятно из описания первого вопроса, из етого файла приложение будет вытаскивать разную информацию которая ему надо, например нужно добавить несколько значений в одну строку в Excel эти значения будут лежать в таком виде
<vExcel>
<adin atr1="100" atr2="Variant-NomerPosledneiStroki"></<adin>
<dva atr1="200" atr2="Variant-NomerPosledneiStroki"></dva>
</vExcel>
Вотето вот atr2="Variant-NomerPosledneiStroki" это будет типа переменная ее надо будет заменить на номерр строки запомнить как было и вконце вместо ногмера опять записать Variant-NomerPosledneiStroki, для всего этого безобразия мне надо пройтись по всем атрибутам ноды в том примере (без модуля) юзается DOMDocument у него у ноды есть коллекция с атрибутами, attributes вот как я понимаю чтоб е вытянуть мне нужен Ixmldomnamednodemap вот такой вот вещь но его не дает включить без модуля а на модуль матукаеццо что нет такого dcu файла, печаль короче:(


 
Den   (2012-12-19 16:24) [25]

Медвежонок Пятачок - пасибо еще раз буду шаманить дальше:)


 
Медвежонок Пятачок ©   (2012-12-19 16:28) [26]

зачем тебе все атрибуты узла, если записывать надо в конкретный?


 
Den   (2012-12-19 16:29) [27]

а пес его знает, хочется гибкости, чтоб не надо было не только придумывать название "переменной" а еще и куда хош пихать ее.


 
Den   (2012-12-19 16:31) [28]

чтоб не надо было не только придумывать название "переменной" - читать как - не только запоминать как назвал переменную. Блин короче хочу больше чтоб было вариантов куда ее можно было записать тоесть atr1="variatn-Onda" atr1="variatn-Dve" i td


 
Den   (2012-12-19 16:32) [29]

atr1="variatn-Onda" atr2="variatn-Dve" i вот так веренее


 
Плохиш ©   (2012-12-20 12:52) [30]

Зачем оно тебе это программирование? Тебе всё-равно не интересно.

PS. google сказал
Ungef&#228;hr 6.240 Ergebnisse


 
Den   (2012-12-21 08:15) [31]

Чего это не интересно? Да и дело не в интересе, не люблю просто монотонную работу делать. Писать скрипты намного прикольнее. А само програмирование да, честно не люблю учить то что уже придумали взять тот же xml еслиб было время то фиг бы я заморачивался читать как его там придумали, а склепал бы все сам. долго? да, но зато все понятно что и как работает и чтоб исправить что-то не нужно 2 часа по гуглу шариться.


 
Den   (2012-12-21 08:22) [32]

вот к примеру нужно было чтото в этом xml типа переменных что-то, посмотрел есть такое вроди, entity кажется так зовется, не хочу в гугл лезть, казалось бы чего проще бери юзай, а хрен delphi2010 не дает работать с какойто там схемой, короче нада лезть в xmldom там чтото править чтото делать, мля.. накой мне это гавно надо ваще? За это же время (ну чуть больше) которое я потратил на поиски, уже давно бы сделал то что я хотел, а в голове все это дежрать извините... завтра еще какуюто пургу придумают, потом еще и еще да ну короче меньше знаешь лучше спишь:)



Страницы: 1 вся ветка

Текущий архив: 2013.09.01;
Скачать: CL | DM;

Наверх




Память: 0.55 MB
Время: 0.006 c
15-1364463473
boriskb
2013-03-28 13:37
2013.09.01
Россиянин победил в международном конкурсе программистов Facebook


1-1312192872
Zoro
2011-08-01 14:01
2013.09.01
Работа с gzip.dll


15-1364324720
Дмитрий С
2013-03-26 23:05
2013.09.01
Интересная ошибка.


15-1364240820
Дмитрий С
2013-03-25 23:47
2013.09.01
Нет ли в дельфи каких-нибудь волшебных констант?


15-1364300349
MBo
2013-03-26 16:19
2013.09.01
Касперский не любит мою программу