XPath-selectie door innerlijke tekst

Ik probeer een element met een bepaalde binnentekst uit een geparseerd XML-document te extraheren. Ik weet dat ik een element kan selecteren dat een kind heeft met een bepaalde binnentekst met behulp van //myparent[mychild='foo'], maar in dit voorbeeld wil ik eigenlijk alleen het element “mychild” selecteren .

<myparent>
  <mychild>
    foo
  </mychild>
</myparent>

Wat zou de XPath-query voor “foo” zijn die het “mychild”-knooppunt zou retourneren?


Antwoord 1, autoriteit 100%

Heb je dit al geprobeerd?

//myparent/mychild[text() = 'foo']

U kunt ook de snelkoppeling voor de as selfgebruiken:

//myparent/mychild[. = 'foo']

Antwoord 2, autoriteit 5%

Matt zei het, maar de volledige oplossing:

//myparent[mychild='foo']/mychild

Antwoord 3, autoriteit 3%

U kunt overwegen de functie containste gebruiken om waar/onwaar te retourneren als de test als volgt is gevonden:

//mychild[contains(text(),'foo')]

Zie XSLT-, XPath- en XQuery-functiesvoor referentiefuncties


Antwoord 4

Volgens de HTML:

<myparent>
  <mychild>
    foo
  </mychild>
</myparent>

Het <mychild>-element met tekst als foobevindt zich in de bovenliggende <myparent>-tag en de tekst bevat voorloopen volgendewitruimtetekens.

Dus om het element <mychild>te selecteren, kunt u een van de volgende oplossingen gebruiken:

  • Gebruik normalize-space():

    //myparent/mychild[normalize-space()='foo']
    
  • Gebruik contains():

    //myparent/mychild[contains(., 'foo')]
    

Het negeren van de bovenliggende tag <myparent>die u ook kunt gebruiken:

  • Gebruik normalize-space():

    //mychild[normalize-space()='foo']
    
  • Gebruik contains():

    //mychild[contains(., 'foo')]
    

Other episodes