如何基于其他元素值将“id”属性添加到XML中的元素

时间:2013-05-11 21:45:59

标签: php simplexml

非常感谢有关如何实现以下结果的帮助 - 能够使用PHP代码段或任何方法将id属性添加到<image>标记。

<?xml version="1.0" encoding="utf-8"?>
<root>
    <property>
        <images>
            <image id="1">
                <url>http://www.mywebsite/image?id=1&.jpg</url>
            </image>
            <image id="2">
                <url>http://www.mywebsite/image?id=2&.jpg</url>
            </image>
        </images>
    </property>
</root> 

2 个答案:

答案 0 :(得分:1)

我想你想要创建xml上面的

$array = array(
        "http://www.mywebsite/image?id=1&.jpg",
        "http://www.mywebsite/image?id=2&.jpg"
);

header('Content-Type:text/plain');
$xml = new SimpleXMLElement("<root></root>");
$property = $xml->addChild('property');
$images = $property->addChild('images');

foreach($array as $link) {
    parse_str(parse_url($link, PHP_URL_QUERY), $query);

    $image = $images->addChild('image');
    $image->addAttribute("id", $query['id']);
    $url = $image->addChild("url", urlencode($link));
}

echo $xml->asXML();

答案 1 :(得分:0)

如果您正在阅读字符串,那么您可以循环<images>并将id属性添加到每个<image>

注意:由于您的网址中的&,您的XML会出现错误,因此我为了一个有效的示例而使用&amp;替换了它们。

header('Content-Type:text/plain');
$xmlstring = <<<XML
<?xml version="1.0" encoding="utf-8"?>
<root>
    <property>
        <images>
            <image>
                <url>http://www.mywebsite/image?id=1&amp;.jpg</url>
            </image>
            <image>
                <url>http://www.mywebsite/image?id=2&amp;.jpg</url>
            </image>
        </images>
    </property>
</root>
XML;

$xml = simplexml_load_string($xmlstring);

foreach ($xml->property->images->image as $image)
{
    parse_str(parse_url($image->url, PHP_URL_QUERY), $querystring);
    $image->addAttribute("id", $querystring['id']);
}

echo $xml->asXML();

也可以通过读取XML文件而不是字符串来实现相同的方法:

$xml = simplexml_load_file('path/to/file.xml');