2010-11-16 7 views
0

Je suis complètement nouveau dans les documents DOM, essentiellement ce que j'essaie de faire, c'est de charger un flux RSS et de sélectionner un seul nœud, puis de le sauvegarder dans un fichier XML.Accès à un seul noeud de document DOM XML

Voici le XML que je suis le chargement d'un flux Web:

<?xml version="1.0" encoding="UTF-8"?> 
<rss version="2.0"> 
    <channel> 
     <title>Markets</title> 
     <description/> 
     <link>http://www.website.com</link> 
     <language>en-us</language> 
     <copyright>XML Output Copyright</copyright> 
     <ttl>15</ttl> 
     <pubDate>Tue, 16 Nov 2010 09:38:00 +0000</pubDate> 
     <webMaster>[email protected]</webMaster> 
     <image> 
      <title>title</title> 
      <url>http://www.website.com/images/xmllogo.gif</url> 
      <link>http://www.website.com</link> 
      <width>144</width> 
      <height>16</height> 
     </image> 


      <item> 
       <title>title</title> 
       <description>the description goes here 
       </description> 
       <enclosure url="http://www.website.com/images/image.png" type="image/png"/> 

      </item> 

    </channel> 
</rss> 

Voici ma tentative boiteuse à obtenir le nœud <description> et l'enregistrer à flux.xml:

<?php 

    $feed = new DOMDocument(); 
    $feed->load('http://www.website.com/directory/directory/cz.c'); 
    $nodeValue = $feed->getElementsByTagName('description')->item(0)->nodeValue; 
    $feed->save("feed.xml"); 

?> 

Donc, fondamentalement, Je dois obtenir la balise de description, et l'enregistrer en tant que fichier XML.

Toute aide serait appréciée, merci à l'avance!

+0

s'il vous plaît préciser si vous souhaitez enregistrer la valeur de nœud ** ** ou le nœud ** **. Ces termes ne peuvent pas être utilisés comme synonymes lorsque vous travaillez avec des arbres DOM. – Gordon

Répondre

2

Presque correct. Pour obtenir le « OuterXml » d'un nœud, vous pouvez passer le nœud à saveXml()

$feed = new DOMDocument(); 
$feed->load('http://www.website.com/directory/directory/cz.c'); 
$xml = $feed->saveXml($feed->getElementsByTagName('description')->item(0)); 
file_put_contents("feed.xml", $xml); 

Enregistrement avec file_put_contents ne comprendra pas un XML Prolog. Notez que dans votre exemple, le premier élément de description est vide, donc le fichier contiendra <description/>.

Si vous souhaitez extraire le nœud en tant que document XML autonome, vous devez instancier une nouvelle DOMDocument et import le DOMNode puis utilisez save().

$dom = new DOMDocument($feed->xmlVersion, $feed->xmlEncoding); 
$dom->appendChild(
    $dom->importNode(
     $feed->getElementsByTagName('description')->item(0), 
     TRUE 
    ) 
); 
echo $dom->save('new.xml'); 
+0

Thanx qui a fonctionné, c'était très utile, merci beaucoup! – Odyss3us

0
$feed = simplexml_load_file('feed.xml'); 
$descr=$feed->channel->description; 

Essayez cette

Questions connexes