0

我有以下数据:

<media:group>
    <media:content url="http://www.url.com" bitrate="450" width="320" duration="32" />
    <media:content url="http://www.url.com" bitrate="212" width="320" duration="32" />
</media:group>

我想通过这个搜索并形成一个像这样的数组:

Array (
[0] =>
 [url] => http://www.url.com,
 [bitrate] => 459,
 [width] => 320,
 [duration] => 32
[1] =>
 [url] => http://www.url.com,
 [bitrate] => 212,
 [width] => 320,
 [duration] => 32
)

上面的数组只是我希望如何返回数据的一个示例。

我怎样才能做到这一点?此信息有时会发生变化,并且还会包含其他内容。

谢谢

4

3 回答 3

1

您应该尝试SimpleXML。示例 #5 涵盖了 XML 元素的属性,类似于数组的访问。

于 2012-06-18T12:33:01.770 回答
1

这将起作用。

<?php
$xml = '<media_group>
    <media_content url="http://www.url.com" bitrate="450" width="320" duration="32" />
    <media_content url="http://www.url.com" bitrate="212" width="320" duration="32" />
</media_group>
';
$xml = simplexml_load_string($xml);

// do an xpath query and get all item id's 
$result = $xml->xpath( '//media_content' );

$idList = array();
foreach($result as $key => $node) {
    foreach($node->attributes() as $attr=>$value) {
        $idList[$key][ (string)$attr ] = (string)$value;
    }
}

print_r($idList);
?>

注意:我已更改media:为,media_因为我不知道您使用的命名空间media。为此,您必须先使用registerXpathNamespace,然后才能处理代码。

希望这可以帮助。

于 2012-06-18T14:22:38.753 回答
0
preg_match_all("@url\=\"(?P<url>.*?)\"\s+bitrate\=\"(?P<bitrate>.*?)\"\s+width\=\"(?P<width>.*?)\"\s+duration=\"(?P<duration>.*?)\"@msi", $sYourString, $aResult, PREG_SET_ORDER);

或其他解决方案:

首先将所有项目分开,然后逐个进行,并获取所有属性。

$aMyFullResult = array();

preg_match_all("@<media:content(?P<substring>.*?)/>@msi", $sYourString, $aResults, PREG_SET_ORDER);

foreach ($aResults as $iKey=>$aOneRow)
  preg_match_all("@\s+(\w+)\=\"(.*?)\"\s+@msi", $aOneRow['substring'], $aMyFullResult[], PREG_SET_ORDER);

print_r($aMyFullResult);
于 2012-06-18T12:26:03.817 回答