通过PHP检索XML参数值


retrieving XML parameter value via PHP

我只是想从下面的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"ImageSetURL,那么您可以这样获得:

$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;