通过PHP检索XML参数值

时间:2013-07-07 13:13:01

标签: php xml

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

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

我搜索过,但没有找到类似的问题;它们都以参数标签结束;它们不会降低另一个节点级别。我尝试了这段代码,但收到的错误消息不是很直观:

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

非常感谢任何帮助。提前谢谢!

3 个答案:

答案 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;