XPath: seleziona il testo dei nodi figli selezionati

html-agility-pack xpath

Domanda

Dato che ho un seguente xml:

<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>

Esiste "un XPath" per aiutarmi a selezionare il testo interno di div # Main come un singolo nodo , ma deve escludere i testi di qualsiasi div.quote .

Voglio solo il testo: "Questo è contenuto. Anche questo è contenuto e voglio entrambi"

Grazie in anticipo

Ecco il codice per testare XPath, sto usando .NET con HtmlAgilityPack ma credo che xPath dovrebbe funzionare con qualsiasi lingua

<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>

Il test è fallito ovviamente perché xPath non è ancora corretto.

<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>

Risposta accettata

Non penso ci sia un XPath che ti darà questo come un singolo nodo, perché i valori che stai cercando di ottenere non sono un singolo nodo. C'è una ragione per cui non puoi farlo?

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());

Risposta popolare

Vuoi il testo di qualsiasi figlio della div che non è div con la citazione della classe:

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



Autorizzato sotto: CC-BY-SA with attribution
Non affiliato con Stack Overflow
È legale questo KB? Sì, impara il perché
Autorizzato sotto: CC-BY-SA with attribution
Non affiliato con Stack Overflow
È legale questo KB? Sì, impara il perché