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 self
gebruiken:
//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 contains
te 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')]