在Delphi中使用XML(将特定数据返回给变量)

Jam*_*est 3 xml delphi parsing

在过去的几天里,我一直在尝试使用Delphi 2010和MSXML,我是一个极端的新手,需要一点方向.

var
    MemoryStream: TMemoryStream;
    XMLPath: String;
    sName: String;
    XMLDoc: variant;
    doc: TStringList;
begin
  //unrelated code
  // Create XML File to hard disk
    begin
        MemoryStream := TMemoryStream.Create;

        IdHTTP1.get('http://somewebsite' + , MemoryStream);
        MemoryStream.Position := 0;
        MemoryStream.SaveToFile('data.xml');
        MemoryStream.Free;

    end;
    // Load XML file for data display

    doc:=TStringList.Create;
    doc.LoadFromFile('data.xml');

    XMLDoc := CreateOleObject('Msxml2.DOMDocument.6.0');
    XMLDoc.async := false;
    XMLDoc.LoadXML(doc.Text);
Run Code Online (Sandbox Code Playgroud)

如您所见,我能够将数据加载到硬盘上的XML文件中,然后将该文件加载到DomDocument中.我从这一点开始坚持......我想使用这些数据,就像我在ADO中的记录集一样(例如SomeVariable:= rs.Fields.Item('DesiredData').Value).我做了一些研究并阅读了几种方法.但是我无法想出这个.我知道它必须是微不足道的,我还远远不够了解它.

关于如何写入XML文件似乎有很多很好的例子,但没有关于如何使用数据的例子.

Sal*_*mez 5

我想你可以在接下来的行中做一些事情:

someNode := XMLDoc.selectSingleNode('//route/to/node');
str := someNode.text;
Run Code Online (Sandbox Code Playgroud)

selectSingleNode的参数基本上是一个XPath表达式,因此您可以查询属性节点,如: //route/to/node/@attrib

这是对selectSingleNode的MSDN参考:http://msdn.microsoft.com/en-us/library/ms757846( v = VS.85).aspx ,这里是XPath sintax:http://msdn.microsoft.com /en-us/library/ms256471(v=VS.85).aspx

另外,我可以为您指出一个很好的XML文件,用于Delphi的XML操作,它也与MSXML兼容,但您不必直接使用变体:http://www.omnixml.com/

如果您的XML没有太大变化,那么更好的方法是使用XML数据绑定向导,它基本上从XML或XSD创建一个完整的对象模型(它使得创建或读取XML就像实现复合一样简单对象,创建所需的类和方法):http: //www.youtube.com/watch?v = 4D78MG4CaAI&feature = player_embedded