9
votes

Un meilleur moyen d'éliminer les lignes vierges après l'élimination du nœud Nokogiri

Peut-être que c'est Nitpicky, mais je dois demander.

J'utilise Nokogiri pour analyser XML, supprimez certaines balises et écrivez sur le fichier d'origine avec les résultats. Utilisation de .Remove laisse des lignes vides dans le XML. J'utilise actuellement une regex pour vous débarrasser des lignes vides. Y a-t-il une méthode Nokogiri intégrée que je devrais utiliser?

Voici ce que j'ai: xxx


2 commentaires

Je ne connais pas une méthode utilisant Nokogiri, mais je peux vous dire que votre expression régulière est fausse. Il ne retirera que des lignes blanches simples, pas plusieurs lignes blanches consécutives. Je pense que cela fonctionnera mieux: gsub (/ ^ \ s * \ n /, "")


Ah. Bon point. Jusqu'à présent, je n'ai eu que de traiter avec des lignes blanches simples (même si le nœud prend plusieurs lignes), de sorte que cela fonctionne bien. Peut-être que si je modifie le script pour éliminer plusieurs lignes, cela ne fonctionnera plus. Merci d'avoir souligné cela.


3 Réponses :


7
votes

Il n'y a pas de méthodes intégrées, mais nous pouvons ajouter un xxx


1 commentaires

Ça ne marche pas pour moi .. :( J'ai essayé Ici , mais il n'a pas supprimé ces lignes vides, alors j'ai supprimé cette partie de la réponse. Toute aide?



1
votes

Faire une substitution sur chaque noeud de texte n'a pas fonctionné pour moi non plus. Le problème est que après avoir retiré les nœuds, les nœuds de texte qui vient de devenir adjacents ne se font pas fusionné. Lorsque vous en boucle sur les nœuds de texte, chacun n'a qu'une seule nouvelle ligne, mais il y en a maintenant plusieurs d'une rangée.

Une solution plutôt désordonnée que j'ai trouvée était de répéter le document: P>

xml = Nokogiri::XML.parse xml.to_xml


0 commentaires

3
votes

Ceci a supprimé les lignes vides pour moi;

doc.xpath('//text()').find_all {|t| t.to_s.strip == ''}.map(&:remove)


1 commentaires

Vous pouvez simplement utiliser ... chacun (et: supprimer) car vous n'êtes pas intéressé par le résultat final.