PHP5 a amélioré la prise en charge de XML et utilise DOM pour étendre les capacités d'opération XML. Ces fonctions font partie du noyau PHP5 et n'ont pas besoin d'être installées pour être utilisées.
L'exemple suivant montre simplement le fonctionnement du DOM sur XML. Pour une explication détaillée, veuillez consulter les commentaires dans le code
<?
/************************************************
** utiliser XML en PHP5
**site de référence :
** http://cn.php.net/manual/zh/ref.dom.php
** les codes suivants nécessitent le support PHP5
** www.knowsky.com
*************************************************/
//Créez d'abord un objet DOMDocument
$dom = nouveau DomDocument();
//Puis chargez le fichier XML
$dom -> load("test.xml");
//Fichier XML de sortie
//header("Type de contenu : text/xml;charset=gb2312");
//echo $dom -> saveXML();
//Enregistre le fichier XML, la valeur de retour est int (taille du fichier en octets)
//$dom -> save("newfile.xml");
echo "<hr/>Obtenir tous les éléments du titre :<hr/>";
$titres = $dom -> getElementsByTagName("titre");
foreach ($titres en tant que $node)
{
echo $node -> textContent "<br/>";
//C'est aussi ok
//echo $node->firstChild->data .
}
/*
echo "<hr/>Parcourir tous les nœuds à partir du nœud racine :<br/>";
foreach ($dom->documentElement->childNodes as $items) {
//Si le nœud est un élément (nodeType == 1) et que le nom est item, continuez la boucle
if ($items->nodeType == 1 && $items->nodeName == "item") {
foreach ($items->childNodes as $titles) {
//Si le nœud est un élément et que le nom est titre, imprimez-le.
if ($titres->nodeType == 1 && $titres->nodeName == "titre") {
imprimer $titres->textContent .
}
}
}
}
*/
//Utilisez XPath pour interroger les données
echo "<hr/>Le résultat du nœud titre de l'utilisation de la requête XPath :<hr/>";
$xpath = nouveau domxpath($dom);
$titres = $xpath->query("/rss/channel/item/title");
foreach ($titres en tant que $node)
{
echo $node->textContent."<br/>";
}
/*
Ceci est similaire à l'utilisation de la méthode getElementsByTagName(), mais si Xpath est plus puissant et plus approfondi, cela peut ressembler à ceci :
/rss/channel/item[position() = 1]/title renvoie tous les éléments du premier élément item
/rss/channel/item/title[@id = '23'] Renvoie tous les titres qui contiennent l'attribut id et ont une valeur de 23
/rss/channel/&folder&/title renvoie les titres sous tous les éléments des articles (Note du traducteur : &folder& représente la profondeur du répertoire)
*/
//Écrire de nouvelles données dans le DOM
$item = $dom->createElement("item");
$titre = $dom->createElement("titre");
$titleText = $dom->createTextNode("texte du titre");
$titre->appendChild($titreText);
$item->appendChild($titre);
$dom->documentElement->getElementsByTagName('channel')->item(0)->appendChild($item)
//Supprimer les nœuds du DOM
;
//$dom->documentElement->RemoveChild($dom->documentElement->getElementsByTagName("channel")->item(0));
//Ou utilisez XPath pour interroger le nœud et le supprimer
//$dom->documentElement->RemoveChild($xpath->query("/rss/channel")->item(0));
//$dom->save("newfile.xml");
//Modifier les données du nœud depuis le DOM
//Modifier le premier fichier titre
//Cet endroit est stupide, créez un nouveau nœud, puis remplacez l'ancien nœud. Si quelqu'un a d'autres bonnes méthodes, dites-le moi.
$firstTitle = $xpath->query("/rss/channel/item/title")->item(0);
$newTitle = $dom->createElement("titre");
$newTitle->appendChild(new DOMText("Voici le nouveau texte du titre !!!"));
$firstTitle->parentNode->replaceChild($newTitle, $firstTitle);
//Modifier les propriétés
//$firstTitle = $xpath->query("/rss/channel/item/title")->item(0);
//$firstTitle->setAttribute("orderby", "4");
$dom->save("newfile.xml");
echo "<hr/><a href="newfile.xml">View newfile.xml</a>"
//Le code suivant obtient et analyse php La page d'accueil de .net renverra le contenu du premier élément de titre.
/*
$dom->loadHTMLFile(" http://www.php.net/ ");
$titre = $dom->getElementsByTagName("titre");
print $title->item(0)->textContent;
*/
?>
Voici le code du fichier test.xml :
<?xml version="1.0" encoding="gb2312"?>
<rss version="2.0">
<canal>
<titre>javascript</titre>
<link>http://blog.csdn.net/zhongmao/category/29515.aspx</link>
<description>javascript</description>
<langue>zh-chs</langue>
<générateur>.text version 0.958.2004.2001</générateur>
<élément>
<créateur>zhongmao</créateur>
<title orderby="1">sortie Excel utilisé javascript</title>
<link>http://blog.csdn.net/zhongmao/archive/2004/09/15/105385.aspx</link>
<pubdate>mercredi 15 septembre 2004 13:32:00 GMT</pubdate>
<guid>http://blog.csdn.net/zhongmao/archive/2004/09/15/105385.aspx</guid>
<commentaire>http://blog.csdn.net/zhongmao/comments/105385.aspx</comment>
<comments>http://blog.csdn.net/zhongmao/archive/2004/09/15/105385.aspx#feedback</comments>
<commentaires>2</commentaires>
<commentrss>http://blog.csdn.net/zhongmao/comments/commentrss/105385.aspx</commentrss>
<ping>http://blog.csdn.net/zhongmao/services/trackbacks/105385.aspx</ping>
<description>description du test</description>
</article>
<élément>
<créateur>zhongmao</créateur>
<title orderby="2">mot de sortie utilisé javascript</title>
<link>http://blog.csdn.net/zhongmao/archive/2004/08/06/67161.aspx</link>
<pubdate>vendredi 6 août 2004 16:33:00 GMT</pubdate>
<guid>http://blog.csdn.net/zhongmao/archive/2004/08/06/67161.aspx</guid>
<commentaire>http://blog.csdn.net/zhongmao/comments/67161.aspx</comment>
<comments>http://blog.csdn.net/zhongmao/archive/2004/08/06/67161.aspx#feedback</comments>
<commentaires>0</commentaires>
<commentrss>http://blog.csdn.net/zhongmao/comments/commentrss/67161.aspx</commentrss>
<ping>http://blog.csdn.net/zhongmao/services/trackbacks/67161.aspx</ping>
<description>description du mot test</description>
</article>
<élément>
<créateur>zhongmao</créateur>
<title orderby="3">xmlhttp</title>
<link>http://blog.csdn.net/zhongmao/archive/2004/08/02/58417.aspx</link>
<pubdate>lundi 2 août 2004 10:11:00 GMT</pubdate>
<guid>http://blog.csdn.net/zhongmao/archive/2004/08/02/58417.aspx</guid>
<commentaire>http://blog.csdn.net/zhongmao/comments/58417.aspx</comment>
<comments>http://blog.csdn.net/zhongmao/archive/2004/08/02/58417.aspx#feedback</comments>
<commentaires>0</commentaires>
<commentrss>http://blog.csdn.net/zhongmao/comments/commentrss/58417.aspx</commentrss>
<ping>http://blog.csdn.net/zhongmao/services/trackbacks/58417.aspx</ping>
<description>xmlhttpaaa asd bb cc dd</description>
</article>
</canal>
</rss>