Разбирать пространства имен XML с помощью php SimpleXML

Я знаю, что это было задано много раз, но я не смог получить какие-либо предложения по работе с моей ситуацией, и я искал в Интернете, а здесь и пробовал все, и ничего, и ничего не работает. Мне просто нужно проанализировать этот XML с крышкой пространства имен и просто нужно четыре записи из него.

<?xml version="1.0" encoding="UTF-8"?> <entry> <id>http://alerts.weather.gov/cap/wwacapget.php?x=TX124EFFB832F0.SpecialWeatherStatement.124EFFB84164TX.LUBSPSLUB.ac20a1425c958f66dc159baea2f9e672</id> <updated>2013-05-06T20:08:00-05:00</updated> <published>2013-05-06T20:08:00-05:00</published> <author> <name>w-nws.webmaster@noaa.gov</name> </author> <title>Special Weather Statement issued May 06 at 8:08PM CDT by NWS</title> <link href="http://alerts.weather.gov/cap/wwacapget.php?x=TX124EFFB832F0.SpecialWeatherStatement.124EFFB84164TX.LUBSPSLUB.ac20a1425c958f66dc159baea2f9e672"/> <summary>...SIGNIFICANT WEATHER ADVISORY FOR COCHRAN AND BAILEY COUNTIES... AT 808 PM CDT...NATIONAL WEATHER SERVICE DOPPLER RADAR INDICATED A STRONG THUNDERSTORM 30 MILES NORTHWEST OF MORTON...MOVING SOUTHEAST AT 25 MPH. NICKEL SIZE HAIL...WINDS SPEEDS UP TO 40 MPH...CONTINUOUS CLOUD TO GROUND LIGHTNING...AND BRIEF MODERATE DOWNPOURS ARE POSSIBLE WITH</summary> <cap:event>Special Weather Statement</cap:event> <cap:effective>2013-05-06T20:08:00-05:00</cap:effective> <cap:expires>2013-05-06T20:45:00-05:00</cap:expires> <cap:status>Actual</cap:status> <cap:msgType>Alert</cap:msgType> <cap:category>Met</cap:category> <cap:urgency>Expected</cap:urgency> <cap:severity>Minor</cap:severity> <cap:certainty>Observed</cap:certainty> <cap:areaDesc>Bailey; Cochran</cap:areaDesc> <cap:polygon>34.19,-103.04 34.19,-103.03 33.98,-102.61 33.71,-102.61 33.63,-102.75 33.64,-103.05 34.19,-103.04</cap:polygon> <cap:geocode> <valueName>FIPS6</valueName> <value>048017 048079</value> <valueName>UGC</valueName> <value>TXZ027 TXZ033</value> </cap:geocode> <cap:parameter> <valueName>VTEC</valueName> <value> </value> </cap:parameter> </entry> 

Я использую simpleXML, и у меня есть небольшой простой тестовый скрипт, и он отлично подходит для разбора регулярных элементов. Я не могу, чтобы мои дикки нашли или попытались разобрать элементы с пространствами имен.

Вот небольшой тестовый скрипт с кодом, который я использую, и отлично работает для синтаксического анализа простых элементов. Как это использовать для анализа пространств имен? Все, что я пробовал, не работает. Мне нужно это, чтобы иметь возможность создавать переменные, чтобы я мог встраивать их в HTML для стиля.

 <?php $html = ""; // Get the XML Feed $data = "http://alerts.weather.gov/cap/tx.php?x=1"; // load the xml into the object $xml = simplexml_load_file($data); for ($i = 0; $i < 10; $i++){ $title = $xml->entry[$i]->title; $summary = $xml->entry[$i]->summary; $html .= "<p><strong>$title</strong></p><p>$summary</p><hr/>"; } echo $html; ?> 

Это отлично подходит для разбора регулярных элементов, но как насчет тех, у кого есть cap: namespace под родительским элементом?

 <?php ini_set('display_errors','1'); $html = ""; $data = "http://alerts.weather.gov/cap/tx.php?x=1"; $entries = simplexml_load_file($data); if(count($entries)): //Registering NameSpace $entries->registerXPathNamespace('prefix', 'http://www.w3.org/2005/Atom'); $result = $entries->xpath("//prefix:entry"); //echo count($asin); //echo "<pre>";print_r($asin); foreach ($result as $entry): $title = $entry->title; $summary = $entry->summary; $html .= "<p><strong>$title</strong></p><p>$summary</p>$event<hr/>"; endforeach; endif; echo $html; ?> 

Любая помощь будет принята с благодарностью.

-Благодаря

Я дал такой же ответ здесь – решение вашего вопроса

Вам просто нужно зарегистрировать пространство имен, а затем вы можете нормально работать с файлами simplexml_load_file и XPath

 <?php $data = "http://alerts.weather.gov/cap/tx.php?x=1"; $entries = file_get_contents($data); $entries = new SimpleXmlElement($entries); if(count($entries)): //echo "<pre>";print_r($entries);die; //alternate way other than registring NameSpace //$asin = $asins->xpath("//*[local-name() = 'ASIN']"); $entries->registerXPathNamespace('prefix', 'http://www.w3.org/2005/Atom'); $result = $entries->xpath("//prefix:entry"); //echo count($asin); //echo "<pre>";print_r($result);die; foreach ($result as $entry): //echo "<pre>";print_r($entry);die; $dc = $entry->children('urn:oasis:names:tc:emergency:cap:1.1'); echo $dc->event."<br/>"; echo $dc->effective."<br/>"; echo "<hr>"; endforeach; endif; 

Вот и все.

Вот альтернативное решение:

 <?php $xml = <<<XML <?xml version = '1.0' encoding = 'UTF-8' standalone = 'yes'?> <?xml-stylesheet href='http://alerts.weather.gov/cap/capatom.xsl' type='text/xsl'?> <!-- This atom/xml feed is an index to active advisories, watches and warnings issued by the National Weather Service. This index file is not the complete Common Alerting Protocol (CAP) alert message. To obtain the complete CAP alert, please follow the links for each entry in this index. Also note the CAP message uses a style sheet to convey the information in a human readable format. Please view the source of the CAP message to see the complete data set. Not all information in the CAP message is contained in this index of active alerts. --> <feed xmlns = 'http://www.w3.org/2005/Atom' xmlns:cap = 'urn:oasis:names:tc:emergency:cap:1.1' xmlns:ha = 'http://www.alerting.net/namespace/index_1.0' > <!-- http-date = Tue, 07 May 2013 04:14:00 GMT --> <id>http://alerts.weather.gov/cap/tx.atom</id> <logo>http://img.ruphp.com/php/xml_logo.gif</logo> <generator>NWS CAP Server</generator> <updated>2013-05-06T23:14:00-05:00</updated> <author> <name>w-nws.webmaster@noaa.gov</name> </author> <title>Current Watches, Warnings and Advisories for Texas Issued by the National Weather Service</title> <link href='http://alerts.weather.gov/cap/tx.atom'/> <entry> <id>http://alerts.weather.gov/cap/wwacapget.php?x=TX124EFFB8AA78.FireWeatherWatch.124EFFD70270TX.EPZRFWEPZ.1716207877d94d15d43d410892b9f175</id> <updated>2013-05-06T23:14:00-05:00</updated> <published>2013-05-06T23:14:00-05:00</published> <author> <name>w-nws.webmaster@noaa.gov</name> </author> <title>Fire Weather Watch issued May 06 at 11:14PM CDT until May 08 at 10:00PM CDT by NWS</title> <link href="http://alerts.weather.gov/cap/wwacapget.php?x=TX124EFFB8AA78.FireWeatherWatch.124EFFD70270TX.EPZRFWEPZ.1716207877d94d15d43d410892b9f175"/> <summary>...CRITICAL FIRE CONDITIONS EXPECTED WEDNESDAY ACROSS FAR WEST TEXAS AND THE SOUTHWEST NEW MEXICO LOWLANDS... .WINDS ALOFT WILL STRENGTHEN OVER THE REGION EARLY THIS WEEK...AHEAD OF AN UPPER LEVEL TROUGH FORECAST TO MOVE THROUGH NEW MEXICO AND TEXAS ON WEDNESDAY. SURFACE LOW PRESSURE WILL ALSO DEVELOP TO OUR EAST AS THE TROUGH APPROACHES. THIS COMBINATION WILL RESULT</summary> <cap:event>Fire Weather Watch</cap:event> <cap:effective>2013-05-06T23:14:00-05:00</cap:effective> <cap:expires>2013-05-08T22:00:00-05:00</cap:expires> <cap:status>Actual</cap:status> <cap:msgType>Alert</cap:msgType> <cap:category>Met</cap:category> <cap:urgency>Future</cap:urgency> <cap:severity>Moderate</cap:severity> <cap:certainty>Possible</cap:certainty> <cap:areaDesc>El Paso; Hudspeth</cap:areaDesc> <cap:polygon></cap:polygon> <cap:geocode> <valueName>FIPS6</valueName> <value>048141 048229</value> <valueName>UGC</valueName> <value>TXZ055 TXZ056</value> </cap:geocode> <cap:parameter> <valueName>VTEC</valueName> <value>/O.NEW.KEPZ.FW.A.0018.130508T1900Z-130509T0300Z/</value> </cap:parameter> </entry> <entry> <id>http://alerts.weather.gov/cap/wwacapget.php?x=TX124EFFABB2F0.AirQualityAlert.124EFFC750DCTX.HGXAQAHGX.7f2cf548a67d403f0541492b2804d621</id> <updated>2013-05-06T14:16:00-05:00</updated> <published>2013-05-06T14:16:00-05:00</published> <author> <name>w-nws.webmaster@noaa.gov</name> </author> <title>Air Quality Alert issued May 06 at 2:16PM CDT by NWS</title> <link href="http://alerts.weather.gov/cap/wwacapget.php?x=TX124EFFABB2F0.AirQualityAlert.124EFFC750DCTX.HGXAQAHGX.7f2cf548a67d403f0541492b2804d621"/> <summary>...OZONE ACTION DAY FOR TUESDAY... THE TEXAS COMMISSION ON ENVIRONMENTAL QUALITY (TCEQ)...HAS ISSUED AN OZONE ACTION DAY FOR THE HOUSTON...GALVESTON...AND BRAZORIA AREAS FOR TUESDAY...MAY 7 2013. ATMOSPHERIC CONDITIONS ARE EXPECTED TO BE FAVORABLE FOR PRODUCING HIGH LEVELS OF OZONE POLLUTION IN THE HOUSTON...GALVESTON AND</summary> <cap:event>Air Quality Alert</cap:event> <cap:effective>2013-05-06T14:16:00-05:00</cap:effective> <cap:expires>2013-05-07T19:15:00-05:00</cap:expires> <cap:status>Actual</cap:status> <cap:msgType>Alert</cap:msgType> <cap:category>Met</cap:category> <cap:urgency>Unknown</cap:urgency> <cap:severity>Unknown</cap:severity> <cap:certainty>Unknown</cap:certainty> <cap:areaDesc>Brazoria; Galveston; Harris</cap:areaDesc> <cap:polygon></cap:polygon> <cap:geocode> <valueName>FIPS6</valueName> <value>048039 048167 048201</value> <valueName>UGC</valueName> <value>TXZ213 TXZ237 TXZ238</value> </cap:geocode> <cap:parameter> <valueName>VTEC</valueName> <value></value> </cap:parameter> </entry> </feed> XML; $sxe = new SimpleXMLElement($xml); $capFields = $sxe->entry->children('cap', true); echo "Event: " . (string) $capFields->event . "\n"; echo "Effective: " . (string) $capFields->effective . "\n"; echo "Expires: " . (string) $capFields->expires . "\n"; echo "Severity: " . (string) $capFields->severity . "\n"; 

Вывод:

 Event: Fire Weather Watch Effective: 2013-05-06T23:14:00-05:00 Expires: 2013-05-08T22:00:00-05:00 Severity: Moderate