2013-07-07 63 views
0

我只是想从下面的XML代码中获取URL值。我在通过类别参数时遇到问题:通过PHP检索XML参数值

<ImageSets> 
    <ImageSet Category="primary"> 
     <SwatchImage> 
      <URL>www.url.jpg</URL> 
     </SwatchImage> 
    </ImageSet> 
</ImageSets> 

我搜索了,但还没有找到类似的问题;它们都以参数标签结束;他们不会倒退到另一个节点级别。我想这个代码,但我得到是不是很直观的错误消息:

ImageSets->ImageSet->attributes()->Category['primary']->SwatchImage->URL 

任何帮助将不胜感激。提前致谢!

+0

向我们展示你也试过,所以我们可以修正它的代码。 –

+0

您使用的是什么xml解析器? – DevZer0

回答

1

使用xpathsimplexml做的工作:

$xml = simplexml_load_string($x); // assuming XML in $x 

$urls = $xml-xpath("//imageset[@Category = 'primary']/SwatchImage/URL"); 

xpath声明将选择全部<URL> s全部<imageset> s的属性Category = primary并将其存储在阵列$urls

foreach ($urls as $url) echo "$url<br />"; // output all 

如果你需要第一<URL>只(PHP> = 5.4):

$url = (string)$xml-xpath("//imageset[@Category = 'primary']/SwatchImage/URL")[0]; 
1

我不知道我收到了你的问题的权利,但我会做这样的事情:

$xml=simplexml_load_file("file.xml"); 
echo $xml->ImageSet[0]->SwatchImage->URL; 

是否解决? 万一给我更多的数据,以便我可以编辑代码。虽然适用于我。

0

如果您的要求是得到ImageSet具有Category="primary"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;