0

次のようにXMLファイルをロードしています。

$places=simplexml_load_file("http://www.43places.com/service/search_places?api_key=1234&q=america");
$allPlaces=$places->xpath('//place');
foreach($allPlaces as $title)
{
    echo "a";
}

単にテストするために、ファイルは正しくロードされています。ここでXMLファイルを確認できます。

なぜループしていないのか?

4

2 に答える 2

3

XPathが機能しない理由はわかりませんが、そこに表示されるXML構造に基づくと、XPathは実際には必要ありません。SimpleXMLElementsは少し弱気かもしれませんが、この代替ループ構造を使用するのは非常に簡単です。

foreach( $places->place as $place )
{
    echo "a";
}

また、xpathクエリのオーバーヘッドはまったく必要ありません。必要な構造はすでにそこにあります。

于 2012-04-30T17:06:32.953 に答える
2

ノードを返さないため、ループしていません。それで、それはなぜですか?

技術的には、<place>要素はそれ自体の名前空間内にあります。http://www.43places.com/xml/2005/rc#したがって、要素のplaceいわゆるローカル名のみであり、フルネームではありません。Xpathはフルネームを受け入れませんが、選択した名前(プレフィックス)を使用してxpath操作の名前空間を登録し、それをxpathクエリで使用できます。

$places->registerXPathNamespace("a", "http://www.43places.com/xml/2005/rc#");
$allPlaces = $places->xpath('//a:place');

このクエリは、place探している20個ほどの要素を選択します。

SimpleXML:名前空間を含むXMLの操作も参照してください。

于 2012-04-30T18:17:19.877 に答える