Question

Je travaille actuellement sur l'extraction de données à partir HTML. Je voudrais extraire le texte entre deux balises <p class="xfHeading">.

         <p class="xfHeading"><b>XYZ:</b></p> 
            <p>asdfghjk</p>  
            <p>sdsdsd</p>  
            <p>asdvcvcfghjk</p>  

         <p class="xfHeading"><b>ABC:</b></p> 
            <P>fvgbhnjm</P>  

         <p class="xfHeading"><b>PQR:</b></p> 
            <ul> 

            </ul> 

         <p class="xfHeading"><b>MNO:</b></p> 
             <ul> 
                <li>jdjshdj</li>  
             </ul> 

sortie devrait être:

asdfghjk

sdsdsd

asdvcvcfghjk

Une façon de le faire est:

/p[class="xfHeading"]/following-sibling::p[0]|/p[class="xfHeading"]/following-sibling::p[1]|/p[class="xfHeading"]/following-sibling::p[2]

ou

/p[class="xfHeading"]/following-sibling::p[position()<4]

Cependant, puisque le contenu entre continue à changer tout le temps que je besoin d'une solution dans laquelle le contenu entre les deux balises <p class="xfHeading"> est extrait.

Était-ce utile?

La solution

Utilisez :

(//p[@class="xfHeading"])[1]
          /following-sibling::p
             [. << (//p[@class="xfHeading"])[2]]
                 /text()

Ce moyen : Sélectionnez les enfants texte-nœud de tous les éléments p qui suivent les frères et sœurs du premier élément de p dans le document avec une valeur ayant attribut class de xfHeading, et en même temps sont précédant le deuxième élément de p dans le document avec l'attribut class ayant une valeur de xfHeading.

Autres conseils

EDIT : Après cet éclaircissement, ma suggestion est d'utiliser un FLWOR expression telle que ce qui suit. Cela ressemble à un <p> avec le contenu des balises de <b> appropriées en fonction du contenu unique de cette étiquette de <b>, et renvoie le texte de chaque balise <p> qui est un frère de celui-ci.

for $b in //p[class="xfHeading"]/b and $p in //p[class="xfHeading"]/p
    where $b/text() = "XYZ:"
        return p/text()

Notez que la // est une construction XPATH, pas un commentaire

RÉPONSE VIEUX : Sans un exemple de ce que vous souhaitez les données résultantes ressemblent, répondant à la question est un peu difficile. Cependant, pour sélectionner, par exemple, le texte dans une balise <b>, vous feriez:

/p[class = "xfHeading"]/b/text()

En général, annexant text() à la fin d'une expression renvoie le texte à l'intérieur du nœud en question.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top