【发布时间】: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 解析器类?
-
您正在获取 AV,因为您的节点都不包含文本。它们有属性,有值,但不包含文本。带有文本的节点是
<node>Some text</node>,其中文本介于>和<之间。