我有一个Ruby脚本,它对.NET ASP服务器进行查询,并将结果作为XML字符串获取;
<?xml version="1.0" encoding="utf-8"?>
<Envelope>
<Body>
<QueryServicesResponse>
<QueryServicesResult>
<Date>2016-01-01</Date>
<serviceList>
<service>
<uuid>10264b70-87ee-11e6-ae22-56b6b6499611</uuid>
<flight>EZY0000</flight>
<originName>London Heathrow</originName>
<originShort>LHR</originShort>
<destinationName>London Stansted</destinationName>
<destinationShort>STN</destinationShort>
<scheduledDeparture>2016-01-01T14:00:00</scheduledDeparture>
<scheduledArrival>2016-01-01T14:30:00</scheduledArrival>
</service>
</serviceList>
</QueryServicesResult>
</QueryServicesResponse>
</Body>
</Envelope>
这是处理返回正文的ruby脚本部分;
# Post the request
resp, data = http.post(path, data, headers)
# Output the results
doc = Nokogiri::XML(resp.body)
doc.remove_namespaces!
puts doc
通过带有以下代码的php文件调用ruby脚本;
<?php
$xml = exec("ruby test.rb EZY0000",($results));
$xmlparse = simplexml_load_string($xml);
echo $xmlparse;
?>
但是php在尝试解析结果时会引发以下错误;
PHP Warning: simplexml_load_string(): Entity: line 1: parser error : StartTag: invalid element name
PHP Warning: simplexml_load_string(): </Envelope>
我试图将xml解析成SimpleXMLElement Object
我过去几天一直在尝试各种各样的事情,但现在却陷入困境或对此问题视而不见。我试过htmlspecialchars
,但这也没有帮助。
我唯一能想到的是这与来自ruby脚本的字符串有关,即使它看起来像是正确的xml。
如果我使用上面的xml并使用以下php代码,那么一切都按预期工作,我得到了所需的结果;
<?php
$string = <<<XML
<?xml version="1.0" encoding="utf-8"?>
<Envelope>
<Body>
<QueryServicesResponse>
<QueryServicesResult>
<Date>2016-01-01</Date>
<serviceList>
<service>
<uuid>10264b70-87ee-11e6-ae22-56b6b6499611</uuid>
<flight>EZY0000</flight>
<originName>London Heathrow</originName>
<originShort>LHR</originShort>
<destinationName>London Stansted</destinationName>
<destinationShort>STN</destinationShort>
<scheduledDeparture>2016-01-01T14:00:00</scheduledDeparture>
<scheduledArrival>2016-01-01T14:30:00</scheduledArrival>
</service>
</serviceList>
</QueryServicesResult>
</QueryServicesResponse>
</Body>
</Envelope>
XML;
$xml = simplexml_load_string($string);
print_r($xml);
?>
哪个给了我;
SimpleXMLElement Object
(
[Body] => SimpleXMLElement Object
(
[QueryServicesResponse] => SimpleXMLElement Object
(
[QueryServicesResult] => SimpleXMLElement Object
(
[Date] => 2016-01-01
[serviceList] => SimpleXMLElement Object
(
[service] => SimpleXMLElement Object
(
[uuid] => 10264b70-87ee-11e6-ae22-56b6b6499611
[flight] => EZY0000
[originName] => London Heathrow
[originShort] => LHR
[destinationName] => London Stansted
[destinationShort] => STN
[scheduledDeparture] => 2016-01-01T14:00:00
[scheduledArrival] => 2016-01-01T14:30:00
)
)
)
)
)
)
那么如何从我的ruby脚本中获取xml到一个我可以在php中操作的有效对象? Someome离线说我应该尝试在Rails中完成所有工作 - 但我还没有准备好迎接目前这么多挑战。
答案 0 :(得分:0)
因此,在@slowjack2k的提示下,我重新查看了生成响应的Ruby文件。
doc = Nokogiri::XML(resp.body)
我将其更改为doc = Nokogiri::HTML(resp.body)
并且显示为低并且看到它现在正常工作并按预期在php中返回有效的xml对象。