2017-06-10 1 views
0

Je suis nouveau à JS. Je racle une url avec des rayons X. Les balises sont supprimés lorsque gratté comme prévu, mais je veux l'étiquette <br> être remplacé par quelque chose comme ;Étiquettes de frein enlevées sur l'éraflure des rayons X

Par exemple: Si je gratter quelque chose comme 'span#scraped-portion'

<span id="scraped-portion"><span class="bold>NodeJS</span><br> 
    <span class="bold>Version:</span> 8<br><span class="bold>Date released:</span> 2017 Jan<br><span class="bold>Description:</span>Some other text 
</span> 

j'obtenir un résultat similaire à la suivant

NodeJS /n Version: 8Date released: 2017 JanDescription: Some other text 

Le texte autour <br> balises sont ajoutés ensemble et il se difficile de comprendre ce qui est quoi. Je veux donc remplacer l'étiquette <br> par quelque chose comme ;.

Est-il possible ou devrais-je mieux utiliser d'autres bibliothèques?

+0

peut-être un [filtre] (https://github.com/matthewmueller/rayons X # filtres)? –

Répondre

0

MISE À JOUR

J'ai trouvé une solution à base de pur X-Ray sans qu'il soit nécessaire de remplacer <br> balises html avant en utilisant X-Ray (voir ci-dessous la solution d'origine). De cette façon, vous allez utiliser les fonctions filter de X-Ray en plus de l'intégration de fonctions X-Ray les unes dans les autres (sorte d'imbrication).

Tout d'abord, nous allons remplacer les balises <br> en format html original en utilisant la fonction de filtre personnalisée (appelée replaceLineBreak) définie pour la radiographie. Deuxièmement, nous allons utiliser le résultat de replace avec la reconstruction de la structure html d'origine (en rajoutant <span id="scraped-portion">) comme premier argument d'un appel X-Ray.

J'espère que vous l'aimerez!

var x = Xray({ 
    filters: { 
     replaceLineBreak: function (value) { return value.replace(/\<br\>/g, ';'); }, 
    } 
}); 
var html = 
` 
    <span id="scraped-portion"><span class="bold">NodeJS</span><br> 
     <span class="bold">Version:</span> 8<br><span class="bold">Date released:</span> 2017 Jan<br><span class="bold">Description:</span>Some other text 
    </span> 
`; 

x(html, 
    '#[email protected] | replaceLineBreak' /// Filter function called to replace '<br>' to ';' 
)(function (err, obj) { 
    x(`<span id="scraped-portion">${obj}</span>`, /// Restore oroginal html structure to have the outer span with id 'scraped-portion 
     '#scraped-portion' 
    )(function (err2, obj2) { res.header("Content-Type", "text/html; charset=utf-8"); res.write(obj2); res.end(); }) 
    }); 

Résultant la chaîne suivante:

NodeJS; Version: 8;Date released: 2017 Jan;Description:Some other text 

SOLUTION ORIGINAL

pourquoi ne pas remplacer toutes les occurences de <br> balises avant de traiter le code html par X-Ray ?

function tst(req, res) { 
var x = Xray(); 
var html = 
` 
    <span id="scraped-portion"><span class="bold">NodeJS</span><br> 
     <span class="bold">Version:</span> 8<br><span class="bold">Date released:</span> 2017 Jan<br><span class="bold">Description:</span>Some other text 
    </span> 
`.replace(/\<br\>/g, ';'); 

x 
    (
    html, 
    ['span#scraped-portion'] 
    )(function (err, obj) { res.header("Content-Type", "text/html; charset=utf-8"); res.write(JSON.stringify(obj, null, 4)); res.end(); }) 
    ; 
} 

Ensuite, votre code entraînerait quelque chose comme ça

NodeJS;\n Version: 8;Date released: 2017 Jan;Description:Some other text\n

qui semble à peu près à répondre à vos besoins

+0

Merci beaucoup, je vais le tester bientôt. Maintenant, j'ai une autre question. Comment puis-je créer '[{" Version ":" 8 "," Date de sortie ":" 2017 Jan "," Description ":" Un autre texte "}]'. Je vais créer une nouvelle question pour cela bientôt aussi – Dilshod