Utilisation DOM et XPath pour supprimer un nœud d'un fichier sitemap

Je suis en train de développer une fonction qui supprime certaines URL nœuds à partir de mon fichier sitemap. Voici ce que j'ai jusqu'à présent.

$xpath = new DOMXpath($DOMfile);
$elements = $xpath->query("/urlset/url/loc[contains(.,'$pageUrl')]");
echo count($elements);
foreach($elements as $element){
    //this is where I want to delete the URL
    echo $element;
    echo "here".$element->nodeValue;
}

Les sorties qui "111111". Je ne sais pas pourquoi je ne peux pas l'écho d'une chaîne dans une boucle foreach, si l' $éléments de comptage est "1".

Jusqu'à maintenant, j'ai fait

$urls = $dom->getElementsByTagName( "url" );
foreach( $urls as $url ){
    $locs = $url->getElementsByTagName( "loc" );
    $loc = $locs->item(0)->nodeValue;
    echo $loc;
    if($loc == $fullPageUrl){
                   $removeUrl = $dom->removeChild($url);                
    }
}

Qui marcherait bien si mon sitemap n'était pas si grand. Il temps maintenant, donc je suis en espérant l'aide de requêtes xpath sera plus rapide.

Après Gordon commentaire, j'ai essayé:

$xpath = new DOMXpath($DOMfile);
$query = sprintf('/urlset/url[./loc = "%d"]', $pageUrl);
foreach($xpath->query($query) as $element) {
    //this is where I want to delete the URL
    echo $element;
    echo "here".$element->nodeValue;
}

Et ce n'est pas de retourner quoi que ce soit.

J'ai essayé d'aller un peu plus loin et utilisé codepad, à l'aide de ce qui a été utilisé dans l'autre post mentionné, et cela a fait:

<?php error_reporting(-1);
$xml = <<< XML <?xml version="1.0"
encoding="UTF-8" ?> <url>
<loc>professional_services</loc>
<loc>5professional_services</loc>
<loc>6professional_services</loc> 
</url> XML; 
$id = '5professional_services'; 
$dom = new DOMDocument; $dom->loadXML($xml);
$xpath = new DOMXPath($dom); $query = sprintf('/url/[loc = $id]');
foreach($xpath->query($query) as $record) {
     $record->parentNode->removeChild($record);
}
echo $dom->saveXml();

et que je suis un "Avertissement: DOMXPath::query(): Invalid expression" à la boucle foreach ligne. Merci pour le commentaire sur les urlset, je vais vous assurer d'inclure le double slash dans mon code, essayé et ça n'a rien retourné.

  • double possible de supprimer le nœud enfant dans le fichier xml avec php
  • $url est un DOMNodelist pas un DOMElement? Et la liste ne peut pas être supprimé, peut-être vous avez besoin d'itérer sur la liste et supprimer chaque élément?
  • Je ne comprends pas jakenoble. Pensez-vous que le code que j'avais avant, qui a couru à travers le XML et contre tous loc nœuds de la variable php est la bonne façon de faire? J'ai peut-être défectueux code dans la façon dont il est maintenant?
  • la raison que je vous ai cité que l'autre question, c'est parce qu'il montre comment, en fait, retirer le nœud. Cette partie est absent de votre exemple. Elle n'était pas destinée à suggérer de changer votre XPath. Nous ne pouvons pas vous dire si votre XPath est correct sans voir votre XML.
  • regarder mon nouveau édité réponse.
  • Je suis d'accord. Conceptuellement, c'est un double disriggarding l'espace de noms problème.

InformationsquelleAutor ctrygstad | 2011-01-20