используя php, чтобы проверить, является ли xml атомом или rss - PullRequest
3 голосов
/ 03 января 2011

Я пишу php-код, который должен определить, находится ли данный xml в формате «atom» или «rss». После просмотра файлов atom и rss xml я решил классифицировать xml на основе корневого элемента. Если корневой элемент "<feed", это атом xml. Если это "<rss", то это не атом.

Как я могу выполнить эту проверку с помощью DOM? Пока у меня есть:

$dom = new DOMDocument();
$dom->loadXML($resp);
$feed = $dom->getElementsByTagName("feed");
if($feed != NULL)
echo 'it\'s a atom!';

но он работает не совсем правильно .... Там нет ошибок, он просто пишет "это атом", даже если это не

Ответы [ 5 ]

8 голосов
/ 03 января 2011

Не уверен, что $ resp это строка или путь к файлу, но вот что я могу сделать.

$xml = simplexml_load_file($filepath);
$root_element_name = $xml->getName();
if ($root_element_name  == 'feed') {
    // is atom feed

} else if ($root_element_name  == 'rss') {
    // is rss feed

}

Это загрузит XML и найдет имя корневого узла.Если корневой узел называется feed, это атом, если корневой узел rss, то это rss.

3 голосов
/ 03 января 2011

Держу пари, что вам легче понять этот намек.Если вы ищете имя корневого элемента, проверьте:

$dom->documentElement->tagName;

Это не проверено , но оно должно дать вам то, что вы ищете вгораздо чище и яснее.

2 голосов
/ 03 января 2011

выглядит как $dom как DOMDocument - в этом случае я бы попытался сделать следующее:

$dom->loadXML($resp);
if($dom->getElementsByTagName("feed")->length > 0 && $dom->getElementsByTagName("rss")->length <= 0){
  // atom feed
}else{
  // rss feed
}

(я никогда не использовал DOMDocument, просто прочитал документацию - извините, если это не так)

РЕДАКТИРОВАТЬ:

только что увидел ваш дополнительный код - вахты wron с ним проверяет nullgetElementsByTagName всегда будет возвращать DOMNodeList (пустой, если элементы не найдены)

0 голосов
/ 03 января 2011

В зависимости от того, как / откуда вы анализируете данные, вы можете проверить заголовки для application/atom+xml.Кроме того, вы можете проверить, используя strpos('http://www.w3.org/2005/Atom').

0 голосов
/ 03 января 2011

Вместо проверки на null проверьте количество возвращенных предметов:

$dom = new DOMDocument();
$dom->loadXML($resp);
$feed = $dom->getElementsByTagName("feed");
if($feed->length != 0) {
    echo 'it\'s a atom!';
}
...