我正在寻找一些实际工作的示例代码,以便使用普通的OmniXml (或OmniXmlUtils)单元读取XML。我不想使用TOmniXMLWriter类,而是想使用普通的Delphi代码加载一个xml文件。
我搜索了OmniXml站点,但那里的样本几乎不存在。
提前谢谢。
发布于 2010-08-30 00:46:29
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的目录,其中包含所有的演示。他们会向你解释几乎所有的事情。
如果您决定在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行)。不需要检查节点是否存在等。枚举器提供了很大的帮助。我强烈建议您使用这种方法,因为它要清晰得多。
发布于 2010-08-29 17:59:11
从样本链接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的作者应该把示例代码之类的东西放在自己的位置上。
谢谢。
https://stackoverflow.com/questions/3594015
复制相似问题