2017-12-12 15 views
0

の内容を取得できません:は、私はこののコンテンツを取得したいと思いXML-子

<wp:postmeta> 
     <wp:meta_key>_wp_attached_file</wp:meta_key> 
     <wp:meta_value><![CDATA[/home/image.jpg]]></wp:meta_value> 
    </wp:postmeta> 

これは私がこの問題を解決しようとした方法である:

$this->xml = simplexml_load_file($this->filepath); 

    foreach($this->xml->channel->item as $item){ 

      $content = $item->children('http://purl.org/rss/1.0/modules/content/'); 
      $excerpt = $item->children('http://wordpress.org/export/1.2/excerpt/'); 
      $post = $item->children('http://wordpress.org/export/1.2/'); 

      foreach($post->postmeta as $meta){ 

       if($meta->meta_key == '_wp_attached_file'){ 
        var_dump($meta->meta_value); 
       } 
       ($meta->meta_key == '_wp_attached_file') ? $path = $meta->meta_value : $path = null; 
      } 
     } 

しかし残念ながら、私は取得していますこの結果:

object(SimpleXMLElement)#816 (1) { 
    [0]=> 
    object(SimpleXMLElement)#820 (0) { 
    } 
} 

この要素は空のようですか?値/home/image.jpgを取得するにはどうすればよいですか?

答えて

1

SimpleXMLElementにvar_dumpを使用すると、部分的な結果が得られる傾向があります。いくつかの有用な出力を得るには、いくつかの方法があります。 XMLの非常に削減バージョンでは、これがうまくいけば、あなただけの<meta_value>を望んでいた場合

if($meta->meta_key == '_wp_attached_file'){ 
    var_dump($meta->meta_value); 
    echo (string)$meta->meta_value.PHP_EOL; 
    echo $meta->meta_value->asXML(); 
} 

これは出力...

class SimpleXMLElement#9 (1) { 
    public ${0} => 
    class SimpleXMLElement#11 (0) { 
    } 
} 
/home/image.jpg 
<wp:meta_value><![CDATA[/home/image.jpg]]></wp:meta_value> 

あなたは、コードを簡略化することができ...あなたのアイデアを与えるだろうXPathを使用して、ちょうどこのデータを抽出することにより、_wp_attached_fileの要素...

$xml->registerXPathNamespace("wp", "http://wordpress.org/export/1.2/"); 
foreach($xml->item as $item){ 
    $attachedFile= $item->xpath("//wp:postmeta[wp:meta_key[text() = '_wp_attached_file']]/wp:meta_value"); 
    var_dump($attachedFile); 
    echo (string)$attachedFile[0].PHP_EOL; 
    echo $attachedFile[0]->asXML(); 
} 

XPathは「_wp_attached_あるmeta_keyを探しますファイル 'を選択し、meta_value要素を取得します。 wp名前空間を持っているので、任意のXPath式で使用する前にxmlに登録する必要があります。

Finally = ->xpath()は一致するノードのリストを返します。これが唯一のものでなければならないので(ここでは前提とします)、エコーの一部では[0]が使用されます。これはまた、出力

...

array(1) { 
    [0] => 
    class SimpleXMLElement#5 (0) { 
    } 
} 
/home/image.jpg 
<wp:meta_value><![CDATA[/home/image.jpg]]></wp:meta_value> 
関連する問題