2015-01-20 3 views
1

Я пытаюсь выделить каждый блок <TEXT> в моем XML, минус CDATA.PHP SimpleXML ForEach

Но по какой-то причине я только получаю первый.

Что я делаю неправильно?

Мой XML:

<WORLD> 
<HAPPENINGS> 
<EVENT id="30978968"> 
<TIMESTAMP>1421724317</TIMESTAMP> 
<TEXT> 
<![CDATA[ @@[email protected]@ was admitted to the World Assembly. ]]> 
</TEXT> 
</EVENT> 
<EVENT id="30978955"> 
<TIMESTAMP>1421724294</TIMESTAMP> 
<TEXT> 
<![CDATA[ @@[email protected]@ applied to join the World Assembly. ]]> 
</TEXT> 
</EVENT> 
<EVENT id="30978506"> 
<TIMESTAMP>1421723233</TIMESTAMP> 
<TEXT> 
<![CDATA[ @@[email protected]@ applied to join the World Assembly. ]]> 
</TEXT> 
</EVENT> 
<EVENT id="30978469"> 
<TIMESTAMP>1421723119</TIMESTAMP> 
<TEXT> 
<![CDATA[ @@[email protected]@ applied to join the World Assembly. ]]> 
</TEXT> 
</EVENT> 
<EVENT id="30978414"> 
<TIMESTAMP>1421722933</TIMESTAMP> 
<TEXT> 
<![CDATA[ @@[email protected]@ was admitted to the World Assembly. ]]> 
</TEXT> 
</EVENT> 
<EVENT id="30978380"> 
<TIMESTAMP>1421722798</TIMESTAMP> 
<TEXT> 
<![CDATA[ 
@@[email protected]@ was admitted to the World Assembly. 
]]> 
</TEXT> 
</EVENT> 
<EVENT id="30978366"> 
<TIMESTAMP>1421722742</TIMESTAMP> 
<TEXT> 
<![CDATA[ 
@@[email protected]@ applied to join the World Assembly. 
]]> 
</TEXT> 
</EVENT> 
</HAPPENINGS> 
</WORLD> 

Мой PHP:

<?php 
$x = 0; 
function waAdmits() { 
$file = "https://www.nationstates.net/cgi-bin/api.cgi?q=happenings;filter=member;limit=7"; 
$xml = simplexml_load_file($file,'SimpleXMLElement', LIBXML_NOCDATA); 
foreach($xml->HAPPENINGS->EVENT->TEXT as $waAdmitNations) { 
echo $waAdmitNations; 
} 
} 
while($x<1) 
{ 
$x++; 
waAdmits(); 
} 
?> 

Мой выход:

@@[email protected]@ was admitted to the World Assembly. 
+0

Примечание: вопреки многим ссылкам, которые вы можете найти в Интернете, вам не нужно использовать 'LIBXML_NOCDATA'. Попробуйте это, и ваш код будет работать нормально. :) – IMSoP

ответ

2

Ваш текущий код перебирает все текстовые элементы первого EVENT элемента (начиная с вы разыскиваете свойство -> EVENT, оно неявно интерпретируется как s ...-> (EVENT [0]) -> ....)

Вы хотите перебрать все элементы EVENT и напечатать соответствующие элементы TEXT.

foreach($xml->HAPPENINGS->EVENT as $event) { 
    echo $event->TEXT, "\r\n"; 
}