我一直在用砖头撞墙,所以非常感谢您的帮助。我第一次使用xpath,让它能够完成我所需要的大部分工作,而且没有任何问题。使用Xpath从命名空间获取XML的数据
下面是一个例子片段:
$urlw = "http://www.wahanda.com/rss/mobdeal.xml";
$wf = gzopen ($urlw, 'r');
$wxml = new SimpleXMLElement (fread ($wf, 1000000));
foreach($wxml->xpath ('/rss/channel/item') as $entry)
{
$price = $entry->price;
echo $price . "<br/>";
}
我的问题是我目前使用的饲料有命名空间声明,以“价格”节点其实是在“W:价格”。我想使用的一些节点前缀为“w:”,而其他节点则不是。因此,我的代码无法获取前缀节点的内容。有人可以告诉我我如何解决这个问题吗?从阅读我添加以下内容:
$wxml->registerXPathNamespace('w', 'http://www.wahanda.com/ns/1.0');
但仍然不确定我需要从这里做什么。
非常感谢您的帮助。
一旦你注册的前缀,你可以[查询与前缀节点(http://stackoverflow.com/search?q=registerXPathNamespace+php),例如''w:foo/w:bar'与['xpath()'方法](http://de2.php.net/manual/en/simplexmlelement.xpath.php)。请澄清问题。 – Gordon 2011-06-13 09:03:25
嗨@Gordon - 我试图找出我需要取代$ price = $ entry-> price;在我上面的代码中给出了XML中每个“item”的单个w:价格值。我在下面的建议中使用了$ price = $ wxml-> xpath('// w:price'),但是这会返回一个数组 - 因为每个“item”中只有一个“w:price”节点,我认为它会起作用。 .. – Chris 2011-06-13 09:28:04
在这种情况下,你必须使用['children()'](http://de2.php.net/manual/en/simplexmlelement.children.php)。有关类似问题,请参见[PHP SimpleXML命名空间问题](http://stackoverflow.com/questions/6027398/php-simplexml-namespace-problem/6027507#6027507)。 – Gordon 2011-06-13 09:30:30