首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Delphi 7-使用OmniXML库操作XML文件

Delphi 7-使用OmniXML库操作XML文件
EN

Stack Overflow用户
提问于 2011-05-25 09:22:46
回答 1查看 2K关注 0票数 5

我有一个很大的XML文件,大约50 megs,我试图使用OmniXML库来操作XML文档。

我不明白OmniXML里的演示..。

XML文件具有如下结构:

代码语言:javascript
复制
<rollercoaster build="0.1 (Dec 30 2010)" debug="no">
    <settings name="roller coaster" sourcefile="rolcost.pas">
        <description>Roller Coaster admin function</description>
        <year>2010</year>
        <manufacturer>ArtTeck</manufacturer>
            <sears name="sears.uk" size="1024"  mda="87117ba5082cd7a615b4ec7c02dd819" region="england" set1="25d"/>
    <sears name="sears.dk" size="1056"  mda="326dbbf94c6fa2e96613dedb53702f8" region="denmark" set1="25d"/>
    <sears name="sears.gr" size="6802"  mda="01b4c38108d9dc4e48da4f8d5821377" region="greece" set1="65d"/>
    </settings>
    <settings name="roller coaster2" sourcefile="rolcost2.pas">
        <description>Roller Coaster user function</description>
        <year>2010</year>
        <manufacturer>ArtTeck</manufacturer>
    </settings>...... and goes on
</rollercoaster>

我想知道的是:

  • 如何使循环显示StringGrid中的节点和子节点。
  • 如何从单个节点获取数据(用于调试目的)。
  • 如何选择设置节点的子节点?
  • 如何获取同一节点的列表,以及如何将节点“西尔斯”.分开?
EN

回答 1

Stack Overflow用户

发布于 2011-05-25 11:18:36

代码语言:javascript
复制
uses
  OmniXML,
  OmniXMLUtils;

procedure TForm28.FormCreate(Sender: TObject);
var
  descNode: IXMLNode;
  iNode   : integer;
  node    : IXMLNode;
  nodeList: IXMLNodeList;
  xml     : IXMLDocument;
begin
  xml := CreateXMLDoc;
  if XMLLoadFromFile(xml, 'c:\0\roller.xml') then begin
    // node enumeration in D2005+
    //for node in XMLEnumNodes(xml, '/rollercoaster/settings') do
    //  lbLog.Items.Add(GetNodeTextStr(node, 'description'));
    // node enumeration in D7 and older
    nodeList := xml.SelectNodes('/rollercoaster/settings');
    for iNode := 0 to nodeList.Length - 1 do begin
      node := nodeList.Item[iNode];
      lbLog.Items.Add(GetNodeTextStr(node, 'description'));
    end;
    // selecting a single node with specified attribute name
    node := xml.SelectSingleNode('/rollercoaster/settings[@name="roller coaster2"]');
    // accessing subnode text
    lbLog.Items.Add(GetNodeTextStr(node, 'description'));
    // accessing subnode text, alternative way
    descNode := node.SelectSingleNode('description');
    lbLog.Items.Add(GetNodeText(descNode));
    // accessing node attribute
    lbLog.Items.Add(GetNodeAttrStr(node, 'sourcefile'));
  end;
end;
票数 8
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6122179

复制
相关文章

相似问题

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