XPath - sélection du texte des nœuds enfants sélectionnés

html-agility-pack xpath

Question

Étant donné que j'ai un XML suivant:

<div id="Main">
    <div class="quote">
        This is a quote and I don't want this text
    </div> 
    <p>
        This is content.
    </p>
    <p>  
        This is also content and I want both of them
    </p>
</div>

Y at-il "un XPath" pour m'aider à sélectionner le texte intérieur de div # Main comme un seul noeud , mais doit exclure les textes de tout div.quote .

Je veux juste le texte: "C'est du contenu. C'est aussi du contenu et je les veux tous les deux"

Merci d'avance

Voici le code pour tester XPath, j'utilise .NET avec HtmlAgilityPack mais je pense que xPath devrait fonctionner avec toutes les langues.

<div id="Main">
    <div class="quote">
        This is a quote and I don't want this text
    </div> 
    <p>
        This is content.
    </p>
    <p>  
        This is also content and I want both of them
    </p>
</div>

Le test a évidemment échoué parce que xPath n’est toujours pas correct.

<div id="Main">
    <div class="quote">
        This is a quote and I don't want this text
    </div> 
    <p>
        This is content.
    </p>
    <p>  
        This is also content and I want both of them
    </p>
</div>

Réponse acceptée

Je ne pense pas qu'il existe un XPath qui vous en fasse un noeud unique, car les valeurs que vous essayez d'obtenir ne sont pas un noeud unique. Y a-t-il une raison pour laquelle vous ne pouvez pas faire cela?

StringBuilder sb = new StringBuilder();
// Action
var nodes = doc.DocumentNode.SelectNodes(xPath);
foreach(var node in nodes)
{
   sb.Append(node.InnerText);
}

// Assert
Assert.AreEqual("This is content.This is also content and I want both of them", 
                sb.ToString());

Réponse populaire

Vous voulez le texte de n'importe quel enfant de la div qui n'est pas div avec une citation de classe:

div/*[not(self::div and @class="quote")]/text()



Sous licence: CC-BY-SA with attribution
Non affilié à Stack Overflow
Est-ce KB légal? Oui, apprenez pourquoi
Sous licence: CC-BY-SA with attribution
Non affilié à Stack Overflow
Est-ce KB légal? Oui, apprenez pourquoi