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

Вниз

XML, Ноды, Рекурсия?   Найти похожие ветки 

 
timekiller ©   (2008-03-18 19:37) [0]

Есть XMLный файл, в нем много много элементов и узлов, уходящих на километр в огромные ветви (1, 2, 3 .. n-й уровень)

Намекните, как сделать функцию (Это называется рекурсия?)
Невозможно все перечислить одними TXMLDocument.ChildNodes[x].ChildNodes[y].ChildNodes[z].....ChildNodes[n]..... и тд

С чего начать?
Тоесть надо зациклить цикл циклов, порождающих циклы дальше ...


 
Ega23 ©   (2008-03-18 19:47) [1]


type
 TForm1 = class(TForm)
   ParamsXMLDoc: TXMLDocument;
   Button1: TButton;
   OpenDlg: TOpenDialog;
   tvXMLTree: TTreeView;
   procedure Button1Click(Sender: TObject);
   procedure FormCreate(Sender: TObject);
 private
   procedure ReadParamsXML(const FileName : TFileName);
   procedure ParseXML(TreeNode : TTreeNode; XMLNode : IXMLNode);
 public
   { Public declarations }
 end;

var
 DBConfigForm: TDBConfigForm;

implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
begin
 if not OpenDlg.Execute then Exit;
 ReadParamsXML(OpenDlg.FileName);
end;

procedure TForm1.ParseXML(TreeNode: TTreeNode; XMLNode: IXMLNode);
var
 ss : string;
 i : Integer;
 CurrNode : TTreeNode;
begin
 if XMLNode.IsTextElement then
   ss := XMLNode.Text
 else
   ss := "<" + XMLNode.NodeName + ">";

 for i:=0 to XMLNode.AttributeNodes.Count-1 do
   ss := ss + " : " + XMLNode.AttributeNodes.Nodes[i].Text;

 if TreeNode=nil then
   CurrNode := tvXMLTree.Items.Add(TreeNode, ss)
 else
   CurrNode := tvXMLTree.Items.AddChild(TreeNode, ss);

 //if XMLNode.IsTextElement then Exit;
 
 for i:=0 to XMLNode.ChildNodes.Count-1 do
   ParseXML(CurrNode, XMLNode.ChildNodes.Nodes[i]);
end;

procedure TForm1.ReadParamsXML(const FileName: TFileName);
begin
 ParamsXMLDoc.FileName := FileName;
 try
   ParamsXMLDoc.Active := True;
   tvXMLTree.Items.Clear;
   ParseXML(nil, ParamsXMLDoc.DocumentElement);
 except

 end;
end;


 
Reindeer Moss Eater ©   (2008-03-19 00:39) [2]

Невозможно все перечислить одними TXMLDocument.ChildNodes[x].ChildNodes[y].ChildNodes[z].....ChildNodes[n]..... и тд

Нужно курить XPath. Тогда перечислишь все что хочешь одним выражением.


 
timekiller ©   (2008-03-19 11:29) [3]


> Ega23 ©   (18.03.08 19:47) [1]


Отличное дерево, неналюбуюс ...... :) только я промахнулся, составив непрально вопрос..
вощм.. надо перебрать и выцедить определенные узлы, например <text> и <date> среди огромного количества всяких <label>,<separator> итд ................


 
Ega23 ©   (2008-03-19 11:34) [4]

А если подумать? Ну совсем чуть-чуть?
if (UpperCase(XMLNode.NodeName) = "TEXT") or
  (UpperCase(XMLNode.NodeName) = "DATE")) then
begin

end
else
 Continue;


 
Reindeer Moss Eater ©   (2008-03-19 12:01) [5]

XML без XPATH это примерно как сидеть на оракле и пользоваться только TTable.


 
timekiller ©   (2008-03-19 20:19) [6]


> Ega23 ©   (19.03.08 11:34) [4]

ок, буду начинать думать.) спасип!



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

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

Наверх




Память: 0.46 MB
Время: 0.006 c
2-1205562445
aleko
2008-03-15 09:27
2008.04.13
Caption динамического TMenuItem


2-1205525076
Malik
2008-03-14 23:04
2008.04.13
Lnk-ярлык определение его параметров


2-1205841012
Washington
2008-03-18 14:50
2008.04.13
ADO и DLL


2-1205773453
Александр Ч.
2008-03-17 20:04
2008.04.13
Обратная совместимость программ с Vista на XP


2-1205964882
SveT
2008-03-20 01:14
2008.04.13
Применение SQL ко всему списку





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский