首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >任何人都有使用OMNIXML加载xml的示例代码

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

Stack Overflow用户
提问于 2010-08-29 16:04:34
回答 2查看 3K关注 0票数 2

我正在寻找一些实际工作的示例代码,以便使用普通的OmniXml (或OmniXmlUtils)单元读取XML。我不想使用TOmniXMLWriter类,而是想使用普通的Delphi代码加载一个xml文件。

我搜索了OmniXml站点,但那里的样本几乎不存在。

提前谢谢。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2010-08-30 00:46:29

OmniXML的一些常见问题:

从文件、流或字符串加载文档

代码语言:javascript
复制
xml := CreateXMLDoc
xml.Load(FileName);
xml.LoadFromStream(XMLAsStream);
xml.LoadXML(XMLAsString)

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

代码语言:javascript
复制
MyNode := XML.ChildNodes.Item[4];
MyNode := XML.SelectSingleNode('Node[5]');

使用XPath进行选择

代码语言:javascript
复制
MyNode := XML.SelectSingleNode('/MyNodes/SpecificNodes/Node[5]');

选择节点集合

代码语言:javascript
复制
MyNodes := XML.SelectNodes('/MyNodes/SpecificNodes/Node');

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

如果您决定在OmniXML之上使用SimpleStorage,那么让我向您展示一下使用SimpleStorage的上例。

代码语言:javascript
复制
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行)。不需要检查节点是否存在等。枚举器提供了很大的帮助。我强烈建议您使用这种方法,因为它要清晰得多。

票数 4
EN

Stack Overflow用户

发布于 2010-08-29 17:59:11

从样本链接Keeper回答。是SelectNodes('..')和SelectSingleNode('...')我正在寻找的部分:

代码语言:javascript
复制
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的作者应该把示例代码之类的东西放在自己的位置上。

谢谢。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3594015

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档