Aidez moi à comprendre cette fonction

Petit nouveau ! | 4 Messages

23 juil. 2010, 16:02

Bonjour,
J'ai pas bien compris le rôle de la fonction DOMDocument::getElementsByTagNameNS :oops: alors qui peut m'expliquer tous sur cette fonction :priere:

Modérateur PHPfrance
Modérateur PHPfrance | 6373 Messages

23 juil. 2010, 16:43

Cela te renvoie tous les noeuds qui ont un nom de balise identique à celui passé en paramètre
DOMDocument::getElementsByTagName ( string $name )
Exemple inspiré d'un commentaire de la doc, que tu peux exécuter pour voir :
<?php

$xml  =<<<EOT
<?xml version="1.0" encoding="ISO-8859-1"?>
<news>
    <item>
        <title>News 1</title>
        <created>04/2/2010 08:00 EST</created>
        <url>http://news.example.com/news.pdf</url>
    </item>
    <item>
        <title>News 2</title>
        <created>04/25/2010 08:00 EST</created>
        <url>http://news.example.com/news.pdf</url>
    </item>
    <item>
        <title>News 3</title>
        <created>04/27/2010 08:00 EST</created>
        <url>http://news.example.com/news.pdf</url>
    </item>
</news>
EOT;

$doc = new DOMDocument();

if ($doc->loadXML($xml)) {
    $titles = $doc->getElementsByTagName('title');
	
	echo $titles->length.' titres trouvés<br /><br />';
    foreach($titles as $title) {
        echo $title->nodeValue;
		echo '<br />';
    }
}

?>
Résultat :
3 titres trouvés

News 1
News 2
News 3

Petit nouveau ! | 4 Messages

23 juil. 2010, 16:58

Cela te renvoie tous les noeuds qui ont un nom de balise identique à celui passé en paramètre
DOMDocument::getElementsByTagName ( string $name )
Non je l'ai bien compris cette fonction mais mon question etait sur la fonction DOMDocument::getElementsByTagNameNS :non: ,et on parlant de ça est ce que tu peut me dire comment recuper un attribut d'une balise par exemple je veux recuperer le lien de lattribut href de la balise <a>?????

Modérateur PHPfrance
Modérateur PHPfrance | 6373 Messages

23 juil. 2010, 17:11

Ah ok le NS était subtil... :)

Mais c'est pareil, sauf que tu limites à un namespace. Si tu regardes l'exemple de la doc c'est assez clair: http://www.php.net/manual/en/domdocumen ... namens.php

Dans le document XML présenté on voit deux balises "include": <xi:include> et <include>
<?xml version="1.0" ?>
<chapter xmlns:xi="http://www.w3.org/2001/XInclude">
<title>Books of the other guy..</title>
<para>
 <xi:include href="book.xml">
  <xi:fallback>
   <error>xinclude: book.xml not found</error>
  </xi:fallback>
 </xi:include>
 <include>
  This is another namespace
 </include>
</para>
</chapter>
Si on recherche les balises "include", en limitant au namespace xi, on en aura qu'une :
<?php

$xml = <<<EOD
<?xml version="1.0" ?>
<chapter xmlns:xi="http://www.w3.org/2001/XInclude">
<title>Books of the other guy..</title>
<para>
 <xi:include href="book.xml">
  <xi:fallback>
   <error>xinclude: book.xml not found</error>
  </xi:fallback>
 </xi:include>
 <include>
  This is another namespace
 </include>
</para>
</chapter>
EOD;
$dom = new DOMDocument;

// load the XML string defined above
$dom->loadXML($xml);

foreach ($dom->getElementsByTagNameNS('http://www.w3.org/2001/XInclude', '*') as $element) {
    echo 'local name: ', $element->localName, ', prefix: ', $element->prefix, "\n";
}
?>
local name: include, prefix: xi
:arrow: http://fr.wikipedia.org/wiki/Espace_de_noms

Sinon pour récupérer la valeur d'un attribut, voir la classe DomElement: http://www.php.net/manual/en/domelement ... ribute.php