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:しました。そのためには、コードで作業する前に、registerXpathNamespaceを使用する必要があります。media_media

お役に立てれば。

于 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);

または別の解決策:

最初にすべてのアイテムを分離し、次に 1 つずつ移動して、すべてのプロパティを取得します。

$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 に答える