7
votes

PHP DOM Retirer le contenu de l'élément de congé

J'essaie de supprimer certains liens en fonction de leur étiquette d'identification, mais laissez le contenu du lien. Par exemple, je veux tourner xxx

à xxx

J'ai essayé en utilisant ci-dessous. xxx

grossièrement pris de ici mais cela crache simplement le même contenu de $ html .

aucune idée de la façon dont je voudrais y arriver?


2 commentaires

Vous ne modifiez pas votre document ici, c'est pourquoi il crache le même contenu. Exemple Vous avez fourni des appels Remplacement de l'objet sur DOM, et vous ne créez que la création de variable que vous remplacez ultérieurement avec une sortie de Sauvegarderxml


Bonne question, +1. Consultez ma réponse d'une seule solution d'expression XPath qui sélectionne exactement les nœuds recherchés. :)


3 Réponses :


14
votes

C'est ma fonction pour cela: xxx pré>

donc ceci: p> xxx pré>

doit vous donner: p>

$xpath = new DOMXpath($dom);
$node = $xpath->query('//a[@id="something"]')->item(0); // get first
DOMRemove($node);


7 commentaires

J'ai consulté ce code sur un autre message que vous avez fait, mais a) je reçois une erreur erreur fatale: appelez à une fonction membre Insérer avant () sur un non-objet et b) Comment puis-je adapter Ceci pour supprimer uniquement les éléments d'un identifiant spécifique?


@Jack: Désolé mon mauvais, l'argument de la fonction était censé être $ à partir de et non $ noode . Fixé. Merci d'avoir fait remarquer cela. Ajout également un exemple pour récupérer un nœud avec un identifiant spécifique .


Deux questions; Comment irait-il de sortir les données révisées? Et quand j'utilise l'exemple que vous avez donné pour des identifiants spécifiques, je reçois la même erreur que précédemment.


@Jack: Utilisez DOMDOCUMENT :: SANCHDHTML pour la sortie. Pour l'erreur, avez-vous mis à jour le code? Cela fonctionne bien pour moi maintenant.


Tu avais raison. Le nouveau code était libellé. Je demandais quelque chose qui n'existait pas. Après un peu de peau de peau, il fait le travail requis. Merci beaucoup!


S'il vous plaît aider dans cette question Stackoverflow. com / questions / 24713728 / ...


Vous devez vérifier si le sœur existe ou produira une erreur sur des éléments sans contenu comme: (qui sont parfois créés par HTML Editors) Fonction Domremove (Domnode $ à partir de) {$ frère = $ à partir de-> premier enfant; Si ($ frère) {do {$ suivant = $ fromage-> Nextsibling; $ de-> parentnode-> insertBefore ($ frère, dollar de); } alors que ($ frère = $ suivant); } $ de-> parentnode-> removechild ($ à partir de); }



1
votes

Utilisez STRY>:

 //a[@id='remove']/node() 
| 
 //*[a[@id='remove']]/node()[not(self::a[@id=''remove])]


0 commentaires

2
votes

Une approche similaire à la réponse de @ Netcoder, mais en utilisant une structure de boucle différente et des méthodes de domemiliation. XXX


1 commentaires

Peut $ enfant = $ link-> removechild ($ link-> fiated); simplement être écrit comme $ enfant = $ link-> fiated>?