2

xml からすべての URL 値を取得しようとしています。

entryたとえば、次のエントリのような形式で正確に何百もあり16ます。

<?xml version="1.0" encoding="utf-8" ?>
<root xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
   <entries>
   <entry id="16">
      <revision number="1" status="accepted" wordclass="v" nounclasses="" unverified="false"></revision>
      <media type="audio" url="http://website.com/file/65.mp3" />
      </entry>
   <entry id="17">
      ....
   </entry>
</entries>
</root>

このコードを使用していますが、動作させることができません。なんで?

$doc = new DOMDocument;

$doc->Load('data.xml');

$xpath = new DOMXPath($doc);

$query = '//root/entries/entry/media';

$entries = $xpath->query($query);

そのための正しいクエリは何ですか? url値のみを取得するのが最善です。

4

2 に答える 2

2

クエリはおそらく適切な要素を返しますが、デフォルトではメディアタグのコンテンツを提供します(タグは自己終了であるため、この場合は空です)。

urlタグの属性を取得するには、次のgetAttribute()例を使用する必要があります。

$entries = $xpath->query('//root/entries/entry/media');
foreach($entries as $entry) { 
  print $entry->getAttribute("url")."<br/>";
}

または、代わりに属性を xpath クエリして、その値を読み取る必要があります。

$urlAttributes = $xpath->query('//root/entries/entry/media/@url');
                                                          #####
foreach ($urlAttributes as $urlAttribute)
{ 
    echo $urlAttribute->value, "<br/>\n";
                        #####
}

DOMAttr::$valueドキュメントを参照してください:

価値


属性の値

于 2013-03-18T17:43:51.193 に答える
1

私は実際にSimpleXMLでそれを行います:

$file  = 'data.xml';
$xpath = '//root/entries/entry/media/@url';

$xml  = simplexml_load_file($file);
$urls = array();

if ($xml) {
    $urls = array_map('strval', $xml->xpath($xpath));
}

これにより、すべてのURLが$urls配列内の文字列として提供されます。XMLファイルのロード中にエラーが発生した場合、配列は空です。

于 2013-03-19T10:24:02.883 に答える