-1

重複の可能性:
urlphpからのxmlの解析

ホスティングが一部のdomまたはsimplexml関数で機能しないため、URLからxml-documentを解析し、CURLを使用するように解決する必要があります。ユーロの記号を置き換えて表示するにはどうすればよいですか。関数str_replaceは私を助けません。

<?php
$url = 'http://www.aviasales.ru/latest-offers.xml';


$ch = curl_init();

curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 2);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_USERAGENT, 'app');

$query = curl_exec($ch);
curl_close($ch);
$xml=simplexml_load_string($query);
//$xml = str_replace('&euro;', '€', $xml);
?>

<table width=100%>

    <tr bgcolor="#CAE8F0" align="left">
        <td><b><?= $xml->offer[1]['title']?></b></td>
       <td width=5%><b><a href="<?=$xml->offer[1]["href"]?>">buy</a></td>
    </tr>

</table>
4

3 に答える 3

1

str_replaceあなたが理解したように、オブジェクトでは機能しません。ただし、これを html に出力する場合は、エンティティをそのままにしておくことができます。

デコードする必要がある場合は、オブジェクト全体ではなく、プロパティを実行しますhtml_entity_decode

于 2013-02-01T01:18:55.973 に答える
0

SimpleXMLを使用してXMLを直接編集することはできません。

SimpleXML拡張機能は、XMLを通常のプロパティセレクターと配列イテレーターで処理できるオブジェクトに変換するための非常にシンプルで使いやすいツールセットを提供します。http://www.php.net/manual/en/intro.simplexml.php

PHPDOM拡張機能を使用する必要があります。

DOM拡張機能を使用すると、PHP5を使用したDOMAPIを介してXMLドキュメントを操作できます。http://www.php.net/manual/en/intro.dom.php

例:

// Create
$doc = new DOMDocument();
$doc->formatOutput = true;

// Load
if(is_file($filePath))
    $doc->load($filePath);
else
    $doc->loadXML('<rss version="2.0"><channel><title></title><description></description><link></link></channel></rss>');

// Update nodes content
$doc->getElementsByTagName("title")->item(0)->nodeValue = 'Foo';
$doc->getElementsByTagName("description")->item(0)->nodeValue = 'Bar';
$doc->getElementsByTagName("link")->item(0)->nodeValue = 'Baz';

ここで質問と選択した回答を組み合わせた例:https ://stackoverflow.com/a/6001937/358906

于 2013-02-01T01:39:26.620 に答える
0

あなたのコードでは、 $xml は文字列ではなく、SimpleXMLElement です。文字列をロードする前に、おそらく € エンティティを置き換えることができます。

$xml = simplesml_load_string(str_replace('&euro;', '€', $query));

$query がマルチバイト文字でエンコードされている限り、問題ありません。そうでない場合は、おそらく $xml をトラバースする必要があります。

于 2013-02-01T01:22:15.763 に答える