2010-11-23 8 views
0

J'ai regardé autour de moi, mais je n'arrive toujours pas à trouver une réponse réalisable à l'édition et à la suppression de xml avec php sans l'utilisation de simpleXML (comme j'aimerais l'utiliser). J'espérais que quelqu'un pourrait le décomposer simplement pour moi, car mon cerveau ne fait pas face à ce genre de choses! Le fichier xml que je dois travailler avec ressemble à quelque chose comme ceci:Modification et suppression de nœuds XML avec PHP

<allentries> 
    <entry> 
    <entryid>1</entryid> 
    <title>This is the title</title> 
    <date>2010</date> 
    <author>Some Guy</author> 
    </entry> 
    <entry> 
    <entryid>2</entryid> 
    <title>This is Another title</title> 
    <date>2011</date> 
    <author>Some Other Guy</author> 
    </entry> 
    <entry> 
    <entryid>3</entryid> 
    <title>This is the other title</title> 
    <date>2012</date> 
    <author>And Another Guy</author> 
    </entry> 
</allentries> 

Je dois pouvoir faire deux choses avec PHP - Tout d'abord, je dois être en mesure d'accepter les valeurs affichées à partir d'un formulaire, choisissez l'entrée correcte basé sur le numéro d'entrée et modifier chaque élément dans cette entrée avec les nouvelles données. Par exemple. si entryid = 2, passez à la seconde entrée et remplacez le texte par le titre, la date et l'auteur par les nouvelles données.

La deuxième chose que je dois être en mesure de faire (avec une fonction différente évidemment) est de choisir l'entrée basée sur le numéro d'entrée et de supprimer toute l'entrée, tag, données, enfants et tous.

Il semble que cela ne devrait pas être trop difficile, mais chaque exemple que j'ai utilisé jusqu'ici ne fait rien. Quelqu'un peut-il suggérer quelque chose ou d'autres tutoriels quelque part qui pourrait m'aider?

Merci beaucoup pour votre temps!

+1

Pouvez-vous clarifier pourquoi vous ne pouvez pas utiliser SimpleXML et si vous pouvez utiliser l'une des [extensions XML disponibles] (http://de2.php.net/manual/fr/refs.xml.php), de préférence [ DOM] (http://de2.php.net/manual/fr/book.dom.php)? – Gordon

+0

Je n'ai pas accès à changer le fichier xml - J'avais l'impression que vous devez ajouter des balises top/tail pour que le fichier xml soit lu comme une chaîne utilisable avec simplexml - toutes les extensions qui ne nécessitent pas de changer le fichier xml serait bien je pense – HappyNuclear

+0

Je ne comprends pas ce que vous voulez dire en ajoutant des balises top/tail. Voulez-vous dire que vous devez envelopper le XML dans un élément racine? C'est seulement nécessaire quand votre XML n'a pas déjà un élément racine. Le XML que vous montrez en a un avec 'allentries'. – Gordon

Répondre

0

2 voies rapides, à la fois en utilisant des expressions régulières:

  • break XML à un tableau en utilisant des expressions régulières, avec la valeur de la EntryID comme la clé
    • sur la mise à jour vient de construire la nouvelle valeur et remplacer la valeur à la clé spécifiée
    • sur supprimer tout unset
  • utiliser des expressions régulières pour remplacer les noeuds

Aucune idée de la performance pour ces deux cas. Je vais essayer de vous fournir une expression régulière pour vous aider.

Gabriel

+0

L'analyse XML à l'aide de regex et la suppression/remplacement de nœuds ne sont pas conseillées. en fait, c'est dangereux! – stillstanding

+0

@stillstanding c'est pas dangereux. Ce n'est tout simplement pas pratique et très sujet aux erreurs, sauf si vous mettez beaucoup d'effort dans l'écriture d'un analyseur décent (qui ne paie pas lorsque les parseurs sont facilement disponibles) – Gordon

+1

erreur-sujette = dangereux :) – stillstanding

0

Ok, désolé, a fait quelques recherches et a trouvé un bon exemple à l'aide this site:

$xml_file = "thefile.xml"; 
if(!$xml=simplexml_load_file($xml_file)){ 
    trigger_error('Error reading XML file',E_USER_ERROR); 
} 

simplexml_load_file au lieu de simplexml_load_string fonctionne comme un charme maintenant! Pas étonnant que vous soyez confus - merci pour toutes vos réponses et pour avoir toléré ma noobishness!

Questions connexes