我只是想从下面的XML代码中获取URL值。我在通过类别参数时遇到问题:
<ImageSets>
<ImageSet Category="primary">
<SwatchImage>
<URL>www.url.jpg</URL>
</SwatchImage>
</ImageSet>
</ImageSets>
我搜索了一下,但没有找到类似的问题;它们都在参数标签处结束;它们不会下降到另一个节点级别。我尝试了这个代码,但收到了不太直观的错误消息:
ImageSets->ImageSet->attributes()->Category['primary']->SwatchImage->URL
如有任何帮助,我们将不胜感激。提前感谢!
在simplexml
中使用xpath
来完成任务:
$xml = simplexml_load_string($x); // assuming XML in $x
$urls = $xml-xpath("//imageset[@Category = 'primary']/SwatchImage/URL");
此xpath
语句将选择所有属性为Category = primary
的<imageset>
下的所有<URL>
,并将其存储在数组$urls
中。
foreach ($urls as $url) echo "$url<br />"; // output all
如果您只需要第一个<URL>
(PHP>=5.4):
$url = (string)$xml-xpath("//imageset[@Category = 'primary']/SwatchImage/URL")[0];
我不确定我是否答对了你的问题,但我会做一些类似的事情:
$xml=simplexml_load_file("file.xml");
echo $xml->ImageSet[0]->SwatchImage->URL;
它能修复吗?万一给我更多的数据,这样我就可以编辑代码了。不过对我有用。
如果您的要求是获得具有Category="primary"
的ImageSet
的URL
,那么您可以这样获得:
$xml = simplexml_load_string("<?xml version='1.0' ?>
<ImageSets>
<ImageSet Category='primary'>
<SwatchImage>
<URL>www.url.jpg</URL>
</SwatchImage>
</ImageSet>
</ImageSets>
");
$primary_url = '';
foreach ($xml->ImageSet as $set) {
if ($set->attributes()->Category == 'primary') {
$primary_url = $set->SwatchImage->URL;
break;
}
}
echo $primary_url;