使用应用程序从Web服务以XML格式检索运费。 Web服务基于PHP。客户端是VB脚本,特别是HTA。
在初始开发期间,我在服务器上使用XML文件作为测试。以下是该文件的内容:
<shipping>
<rate>
<method>FEDEX GROUND</method>
<description>FedEx Ground</description>
<amount>10.00</amount>
</rate>
<rate>
<method>FEDEX 2 DAY</method>
<description>FedEx 2nd Day</description>
<amount>20.00</amount>
</rate>
<rate>
<method>FEDEX NEXT DAY</method>
<description>FedEx Next Day</description>
<amount>30.00</amount>
</rate>
</shipping>
当我使用MSXML2.ServerXMLHTTP获取该文件时,使用MSXML2.DOMDocument解析XML没有任何问题。
如果我尝试从PHP脚本中获取完全相同的XML,或者即使我将XML文件复制到具有非xml扩展名的文件名,例如.txt,我也会在尝试访问文档时遇到Object Required错误元素。
从PHP获取数据时,我设置标题如下:
header('Content-Type: application/xml; charset=utf-8');
这是VB脚本代码:
Set xmlhttp = CreateObject("MSXML2.ServerXMLHTTP")
xmlhttp.open "GET", "http://craig.clearos.lan/c9pets/api/shippingRates", False
xmlhttp.send
results=xmlhttp.ResponseText
Set xmlDoc = CreateObject("MSXML2.DOMDocument")
xmlDoc.load(xmlhttp.responseXML)
Set ratesNodeCollection = xmlDoc.DocumentElement.getElementsByTagName("rate")
最后一行出现错误,出现“需要对象:'xmlDoc.DocumentElement'”
如果我将第2行更改为此
'xmlhttp.open "GET", "http://craig.clearos.lan/sage/hello.xml", False
它按预期工作。
同样,我已经验证PHP代码和.txt文件包含与.xml文件完全相同的XML。
我添加了parseError陷阱,我收到消息“XML文档必须有一个顶级元素。”这对我来说毫无意义。有一个名为I的顶级元素也添加到.xml文件和PHP的输出中。这并没有改变任何事情。我尝试将标题设置为text / xml而不是application / xml,它也没有做任何事情。
这里的参考是构建XML的非常简单的PHP代码。
$shipping=array(0=>array('method'=>'FEDEX GROUND', 'description'=>'FedEx Ground', 'amount'=>'10.00'),
1=>array('method'=>'FEDEX 2 DAY', 'description'=>'FedEx 2nd Day', 'amount'=>'20.00'),
2=>array('method'=>'FEDEX NEXT DAY', 'description'=>'FedEx Next Day', 'amount'=>'30.00'));
$xml=new SimpleXMLElement('<shipping/>');
foreach($shipping as $row){
$rate=$xml->addChild('rate');
$rate->addChild('method', $row['method']);
$rate->addChild('description', $row['description']);
$rate->addChild('amount', $row['amount']);
}
Header('Content-type: application/xml');
print($retVal->asXML());