使用php检查xml是atom还是rss

使用php检查xml是atom还是rss,php,dom,rss,feed,atom-feed,Php,Dom,Rss,Feed,Atom Feed,我正在编写一个php代码,它必须确定给定的xml是“atom”格式还是“rss”格式。在观察了atom和rss xml文件之后,我决定基于根元素对xml进行分类。如果根元素是“,而不是测试null,请检查返回的项目数: $dom = new DOMDocument(); $dom->loadXML($resp); $feed = $dom->getElementsByTagName("feed"); if($feed->length != 0) { echo 'it\'

我正在编写一个php代码,它必须确定给定的xml是“atom”格式还是“rss”格式。在观察了atom和rss xml文件之后,我决定基于根元素对xml进行分类。如果根元素是
“,而不是测试
null
,请检查返回的项目数:

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

我敢打赌,您可以更容易地得到提示。如果您正在查找根元素名称,请检查:

$dom->documentElement->tagName;

未经测试,但它应该以更清晰、更清晰的方式为您提供所需内容。

看起来像
$dom
是一个
DOMDocument
-在这种情况下,我将尝试以下操作:

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

如果($dom->getElementsByTagName(“提要”)->length>0&&&$dom->getElementsByTagName(“rss”)->length不确定$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,则它是atom,如果根节点名为rss,则它是rss。

根据解析数据的方式/位置,您可以检查
应用程序/atom+XML
的标题。或者,您可以使用
strpos('code>)进行检查http://www.w3.org/2005/Atom')

下次请使用code formattig(我为您更正了这一点,因为您似乎是新来的)。另外:请尝试使用更多的代码-您的代码中的
$dom
是什么?虽然我不能确定
$dom
可能是一个DOMDocument。这是我所知道的唯一一个具有loadXML方法的对象。抱歉,我提出了改进建议。希望它现在看起来更好!您可能希望测试提要,看看它是否为空。也许是本能来自Java,但我无法忍受那些“试图访问非对象的属性”"警告。@cWallenPole
getElementsByTagName
总是返回一个
DOMNodeList
。你知道,我认为我对返回null有问题。现在我在考虑这个问题,可能是长度是0,我试图处理一个不存在的索引。+1因为这会起作用,但我希望OP使用的是DOMDocumen在代码中的其他地方,考虑到他们正在使用Atom/RSS提要……我想,根据php.net/manual/en/domdocument.loadxml.php“>loadxml的签名,这是一个实际XML字符串。现在它已经过测试,可以工作了!谢谢!出于简单性,我将选择它而不是“lonesomeday”的解决方案。
$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

}