2017-12-12 9 views
0

Ich mag würde, den Inhalt dieses erhalten:kann nicht Inhalt von XML-Kind bekommen

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

Dies ist, wie ich versucht, dieses Problem zu lösen:

$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; 
      } 
     } 

Aber leider bin ich immer Dieses Ergebnis:

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

Dieses Element scheint leer zu sein? Wie kann ich den Wert /home/image.jpg bekommen?

Antwort

1

Die Verwendung von var_dump auf SimpleXMLElement kann dazu führen, dass Sie teilweise Ergebnisse erhalten. Es gibt ein paar Möglichkeiten, eine nützliche Ausgabe zu erhalten. Mit einer sehr abgespeckte Version des XML, das hoffentlich wird Ihnen eine Idee geben ...

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

Diese gibt ...

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

Sie könnten den Code vereinfachen, wenn Sie nur die <meta_value> wollte Elemente des _wp_attached_file von XPath und nur diese Daten ...

$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(); 
} 

die XPath sucht die meta_key Extrahieren der ‚_wp_attached_ ist Datei 'und erhält dann das meta_value Element. Da Sie den Namespace wp haben, muss dieser in der XML-Datei registriert werden, bevor er in einem beliebigen XPath-Ausdruck verwendet wird.

Schließlich = ->xpath() wird eine Liste der übereinstimmenden Knoten zurückgeben, so dass dies der einzige sein sollte (hier eine Annahme), dann verwendet es [0] in einigen der Echos.

Dies gibt auch ...

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