我只是想从下面的XML代码中获取URL值。我遇到过类别参数的问题:
<ImageSets>
<ImageSet Category="primary">
<SwatchImage>
<URL>www.url.jpg</URL>
</SwatchImage>
</ImageSet>
</ImageSets>
我搜索过,但没有找到类似的问题;它们都以参数标签结束;它们不会降低另一个节点级别。我尝试了这段代码,但收到的错误消息不是很直观:
ImageSets->ImageSet->attributes()->Category['primary']->SwatchImage->URL
非常感谢任何帮助。提前谢谢!
答案 0 :(得分:1)
我不确定我的问题是否正确,但我会做类似的事情:
$xml=simplexml_load_file("file.xml");
echo $xml->ImageSet[0]->SwatchImage->URL;
它能解决吗? 如果给我更多数据,以便我可以编辑代码。虽然适用于我。
答案 1 :(得分:1)
在xpath
中使用simplexml
来完成这项工作:
$xml = simplexml_load_string($x); // assuming XML in $x
$urls = $xml-xpath("//imageset[@Category = 'primary']/SwatchImage/URL");
此xpath
语句将选择属性为<URL>
的所有<imageset>
下的所有Category = primary
,并将其存储在数组$urls
中。
foreach ($urls as $url) echo "$url<br />"; // output all
如果您只需要第一个<URL>
(PHP&gt; = 5.4):
$url = (string)$xml-xpath("//imageset[@Category = 'primary']/SwatchImage/URL")[0];
答案 2 :(得分:0)
如果您的要求是获得URL
ImageSet
Category="primary"
,那么您可以这样做:
$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;