Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/xml/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 让我发疯的简单xpath问题_Php_Xml_Xpath - Fatal编程技术网

Php 让我发疯的简单xpath问题

Php 让我发疯的简单xpath问题,php,xml,xpath,Php,Xml,Xpath,下面是我使用xpath打印内容的提要的结构 $xml->xpath('/rss/channel//item') 结构 <rss><channel><item><pubDate></pubDate><title></title><description></description><link></link><author></author>&l

下面是我使用xpath打印内容的提要的结构
$xml->xpath('/rss/channel//item')

结构

<rss><channel><item><pubDate></pubDate><title></title><description></description><link></link><author></author></item></channel></rss>
<feed xmlns="http://www.w3.org/2005/Atom" .....><entry><published></published><title></title><description></description><link></link><author></author></entry></feed>
证明我错了的事情

我的问题是什么是正确的xpath?我还缺什么吗

这是代码

<?php

$feeds = array('http://feeds.feedburner.com/blogspot/wSuKU');


$entries = array();
foreach ($feeds as $feed) {
    $xml = simplexml_load_file($feed);
    $entries = array_merge($entries, $xml->xpath('/feed//entry'));
}

echo "<pre>"; print_r($entries); echo"</pre>";

?>
xpath('/feed//entry');
}
回声“;打印(条目);回声“;
?>
试试这个:

(/rss/channel/item 
  | /*[local-name()='feed' and namespace-uri()='http://www.w3.org/2005/Atom']
      /*[local-name()='entry' and namespace-uri()='http://www.w3.org/2005/Atom'])

如果希望一个XPath表达式在应用于RSS或ATOM提要时可以工作,可以使用以下XPath表达式之一:

这是最精确的,但也是最冗长的:

(/rss/channel/item | /*[local-name()='feed']/*[local-name()='entry'])
这个函数忽略ATOM元素的名称空间,只匹配它们的
local-name()

这是最简单,但最不精确,效率最低的一个:


/feed//entry正常(/feed/entry也可以)。你到底得到了什么?什么不起作用呢?
/
是不必要的(它可以是
/
),但这个查询对我来说似乎很有效……有没有您在示例中遗漏的名称空间?很好的猜测,这可能是
print\r
是Array()时我得到的
。我已经用我使用的代码更新了我的问题!谢谢你抽出时间来!我可以再问一件事吗?假设我在数组中使用两个提要,每个结构一个提要。有没有一种方法可以组合xPath,使其在两个提要上都能工作?例如,如果您在/rss/channel//item中找不到任何结果,请使用您发布的代码。我希望我能让自己理解……另一方面,是否有一种服务可以为我添加的任何提要生成相同的结构?(我想这是一个解决办法)好吧,试试一个xpath,如果它什么也不返回,试试另一个。我相信一个解决办法是在使用xpath之前,先预处理XML以删除对名称空间的所有引用。。。当然,这可能会改变过程中XML的含义,因此您可能需要小心使用它。我的意思是,在数组中,我将添加具有这两种结构的提要。
(/rss/channel/item 
  | /*[local-name()='feed' and namespace-uri()='http://www.w3.org/2005/Atom']
      /*[local-name()='entry' and namespace-uri()='http://www.w3.org/2005/Atom'])
(/rss/channel/item | /*[local-name()='feed']/*[local-name()='entry'])
/*//*[local-name()='item' or local-name()='entry']