gpt4 book ai didi

xml - 读取距离xml节点(距离) - Google Maps api - Delphi 6

转载 作者:行者123 更新时间:2023-12-03 03:26:27 35 4
gpt4 key购买 nike

我在 Excel 中使用以下代码返回两点(起点和终点)之间的距离。

Delphi 6 中有类似的方法吗?

我在互联网上找到了几个例子,但是所有的例子都使用了Delphi 6中不存在的功能,也许是因为它太老了。例如,Delphi 6 无法识别 IHTMLDocument2。

  Function Km_Distance(Origin As String, Destination As String) As Double       
Dim myRequest As XMLHTTP
Dim myDomDoc As DOMDocument
Dim distanceNode As IXMLDOMNode

Let Km_Distance = 0

On Error GoTo exitRoute

Let Origin = Replace(Origin, " ", "%20")
Let Destination = Replace(Destination, " ", "%20")

Set myRequest = New XMLHTTP

myRequest.Open "GET", "http://maps.googleapis.com/maps/api/directions/xml?origin=" _
& Origin & "&destination=" & Destination & "&sensor=false", False
myRequest.send

Set myDomDoc = New DOMDocument

myDomDoc.LoadXML myRequest.responseText

Set distanceNode = myDomDoc.SelectSingleNode("//leg/distance/value")
If Not distanceNode Is Nothing Then Km_Distance = distanceNode.Text / 1000

exitRoute:
Set distanceNode = Nothing
Set myDomDoc = Nothing
Set myRequest = Nothing
End Function

我可以读取 API 返回的 xml(代码如下)。

现在的问题是:如何在Delphi上读取这个xml中的距离?相当于:设置 distanceNode = myDomDoc.SelectSingleNode("//leg/distance/value")

procedure TForm1.Button3Click(Sender: TObject);
var
vXMLDoc: TXMLDocument;
NodeRec: IXMLNode;
aasdlkj : IXMLDocument;
XMLFile: String;
begin

XMLFile:= 'http://maps.googleapis.com/maps/api/directions/xml?origin=Curitiba&destination=Joinville';
vXMLDoc := TXMLDocument.Create(self);
vXMLDoc.LoadFromFile(XMLFile); //Le Arquivo xml selecionado

Memo1.Clear;
Memo1.Lines.Add(vXMLDoc.XML.Text);

How to do this?
//NodeRec= vXMLDoc.SelectSingleNode("//leg/distance/value")

if not vXMLDoc.Active Then
exit;
end;

最佳答案

以下内容对我有用:

Uses ... MSXML, UrlMon, ...

function TForm1.GetURL : String;
var
Origin,
Destination,
URL : String;
begin
Origin := StringReplace(edOrigin.Text, ' ', '#20', [rfReplaceAll]);
Destination := StringReplace(edDestination.Text, ' ', '#20', [rfReplaceAll]);
Result := GoogleMapsURL + '&origin=' + Origin + '&destination=' + Destination
+ '&sensor=false';
end;

procedure TForm1.GetXML;
var
XMLDoc: IXMLDOMDocument;
Node : IXMLDomNode;
XMLUrl : String;
XMLFileName: String;
begin

XMLUrl := GetUrl;

XMLFileName := 'C:\temp\temp.xml';

URLDownloadToFile(Nil, PChar(XMLUrl), PChar(XMLFileName), 0, Nil);

Memo1.Lines.LoadFromFile(XMLFileName);

XMLDoc := CoDOMDocument.Create;
XMLDoc.LoadXML(Memo1.Lines.Text);
Node := XMLDoc.SelectSingleNode('//leg/distance/value');

Memo1.Lines.Add(Node.Text);
end;

我使用 URLDownloadToFile 下载 XML,因为由于某种原因 XMLDoc.Load(GetURL) 返回一个空的 XML 文档。我还尝试将 URL 加载到 TWebBrowser 中,但我尝试从中检索 IHtmlDocument2 接口(interface)也失败了。我不知道这些问题是否特定于 googlemaps URL - 通常它们(XMLDoc.Load 和 TWebBrowser 的 IHtlmDocument2 接口(interface))都工作正常。

更新:我使用XMLDoc.Load从googlemaps url获取XML时遇到的困难似乎是因为我使用的导入单元MSXML已过期的日期。以下内容适用于 Windows10 64 位,并且无需使用 URLDownloadToFile (尽管实际上我更喜欢使用它,因为那样 XML 就在我面前)。

procedure TForm1.GetXML2;
var
XMLDoc: IXMLDOMDocument;
Node : IXMLDomNode;
XMLUrl : String;
XMLFileName: String;
begin
XMLDoc := CreateOleObject('Msxml2.DOMDocument.6.0') as IXMLDOMDocument;
XMLDoc.async := False;

XMLUrl := GetUrl;
if not XMLDoc.load(XMLUrl) then
exit;

Assert(XMLDoc.DocumentElement <> nil);

Node := XMLDoc.SelectSingleNode('//leg/distance/value');

Memo1.Lines.Add(Node.Text);

end;

关于xml - 读取距离xml节点(距离) - Google Maps api - Delphi 6,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34509841/

35 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com