【问题标题】:Delphi simple xml parseDelphi简单的xml解析
【发布时间】:2017-12-06 12:08:11
【问题描述】:

我需要从 xml 文件中解析出一些值。问题是 - 我必须用 Delphi =(. 文件很简单

<?xml version="1.0"?>
<Items version="1.0">
  <Item BackupFileName="d:\data.bak">
    <Rating Rate="TOP"/>
  </Item>
  <Item BackupFileName="d:\data2.bak">
    <Rating Rate="OTHER"/>
  </Item>
  ....
</Items>

我只需要一个带有这个文件路径的字符串数组 {"d:\data.bak", "d:\data2.bak", ... } 我用谷歌搜索了一下,找到了一个解决方案(就像我想的那样)

 url := 'D:\Backups.xml';
  xml := CreateOleObject('Microsoft.XMLDOM') as IXMLDOMDocument;
  xml.async := False;
  xml.load(url); // or use loadXML to load XML document using a supplied string
  if xml.parseError.errorCode <> 0 then
    raise Exception.Create('XML Load error:' + xml.parseError.reason);

  nodes_row := xml.selectNodes('/Items');
  for i := 0 to nodes_row.length - 1 do
  begin
    node := nodes_row.item[i];
    result := node.selectSingleNode('Item').text;
end;

但结果似乎总是无效。您能否为此提供或参考一个简单的解决方案?

【问题讨论】:

  • 不应该是xml.selectNodes('/Items/Item');,因为你之后使用了for循环吗?
  • 我遇到了访问冲突 O_o
  • 为什么不使用内置的 XML 解析器类?
  • XML parsing, TXMLDocument的可能重复
  • 您正在获取 AV,因为您的节点都不包含文本。它们有属性,有值,但不包含文本。带有文本的节点是&lt;node&gt;Some text&lt;/node&gt;,其中文本介于&gt;&lt; 之间。

标签: xml delphi


【解决方案1】:

使用IXMLNode.Attributes 属性或IXMLNode.AttributeNodes 属性,因为您的节点不包含文本,您实际上是在寻找属性文本。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2010-10-07
    • 1970-01-01
    • 2016-10-13
    • 1970-01-01
    • 1970-01-01
    • 2014-08-27
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多