任何人都有使用OMNIXML加载xml的示例代码

时间:2010-08-29 08:04:34

标签: xml delphi delphi-7

我正在寻找一些实际的工作示例代码来使用普通的OmniXml(或OmniXmlUtils)单元读取XML。我不想使用TOmniXMLWriter类,如其他地方所述,但希望使用普通的Delphi代码加载xml文件。

我搜索了OmniXml网站,但那里的样本和不存在的样本一样好。

提前致谢。

2 个答案:

答案 0 :(得分:4)

使用OmniXML的一些常见技巧:

从文件或流或字符串

加载文档
xml := CreateXMLDoc
xml.Load(FileName);
xml.LoadFromStream(XMLAsStream);
xml.LoadXML(XMLAsString)

选择单个节点(第5个孩子):

MyNode := XML.ChildNodes.Item[4];
MyNode := XML.SelectSingleNode('Node[5]');

使用XPath选择

MyNode := XML.SelectSingleNode('/MyNodes/SpecificNodes/Node[5]');

选择节点集合

MyNodes := XML.SelectNodes('/MyNodes/SpecificNodes/Node');

如果您从http://www.omnixml.com/download.html下载,则会有一个名为demo inside的目录,其中包含所有演示。他们会向你解释几乎所有事情。

如果您决定在OmniXML之上使用SimpleStorage,请让我使用SimpleStorage向您展示您的上层示例。

xml := StorageFromFile(rssFileName)
for channel in xml.Elements('channel') do
begin
  ListBox1.Items.Add('['+channel.Get('title')AsStringDef+']')
  for Item in channel.Elements('item') do
     ListBox1.Items.Add('  <'+ Item .Get('title')AsStringDef+'>')
 end; //for iChannel

你不知道有多少样板代码消失了(对于相同的功能,21行代码缩小到7行)。无需检查节点是否存在等等。枚举器有很大帮助。我强烈建议你使用这种方法,因为它更清晰。

答案 1 :(得分:1)

来自示例链接Keeper回答。 这是我正在寻找的SelectNodes('..')和SelectSingleNode('...')部分:

xml := CreateXMLDoc;
if not xml.Load(rssFileName) then
   ListBox1.Items.Add('Not an XML document: '+rssFileName)
else begin
 channels := xml.DocumentElement.SelectNodes('channel');
 for iChannel := 0 to channels.Length-1 do begin
   channel := channels.Item[iChannel];
   title := channel.SelectSingleNode('title');
   if assigned(title) then
     ListBox1.Items.Add('['+title.Text+']')
   else
     ListBox1.Items.Add('[]');
   items := channel.SelectNodes('item');
   for iItem := 0 to items.Length-1 do begin
     title := items.Item[iItem].SelectSingleNode('title');
     if assigned(title) then
       ListBox1.Items.Add('  <'+title.Text+'>')
     else
       ListBox1.Items.Add('  <>');
   end; //for iItem
 end; //for iChannel

端;

这是星期天,我想在深入研究Omni源代码之前要求解决方案:)

我认为OmniXml的作者应该将示例代码发布在他身边。

感谢。