.NET ASPサーバーへのクエリを実行し、その結果をXML文字列として取得します。StartTagで失敗したPHPのRubyスクリプトから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>
これは、返されたボディを扱うルビースクリプトのセクションです。
# Post the request
resp, data = http.post(path, data, headers)
# Output the results
doc = Nokogiri::XML(resp.body)
doc.remove_namespaces!
puts doc
rubyスクリプトは、次のコードでPHPファイル経由で呼び出されます。
<?php
$xml = exec("ruby test.rb EZY0000",($results));
$xmlparse = simplexml_load_string($xml);
echo $xmlparse;
?>
しかし、結果を解析しようとすると、次のエラーが発生します。
PHP Warning: simplexml_load_string(): Entity: line 1: parser error : StartTag: invalid element name
PHP Warning: simplexml_load_string(): </Envelope>
私は過去数日間であらゆる種類のものをしようとしたが、今問題にこだわったり盲目だしてきたSimpleXMLElement Object
にXMLを解析しようとしています。私はhtmlspecialchars
を試しましたが、それはどちらも役に立たなかった。
私が考えることができるのは、これがルビスクリプトから出てくる文字列と関係していると思われますが、正しい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
)
)
)
)
)
)
私はどのように私はPHPで操作できる有効なオブジェクトに私のルビースクリプトからXMLを得ることができますか?何かオフラインでは、私はRailsでそれを試してみるべきだと言いました - しかし、私は現時点でそのような多くの挑戦のようなものは準備ができていません。
あなたもルビースクリプトを投稿するべきです。あなたのルビースクリプトが特別なHTMLのエンタテイをエンコードしているようです。 – slowjack2k
身体の反応を扱うスクリプトの部分で質問を更新しました。 – user3788685