Use:
contains('USD|CZK|USD', string-join(o:položka/o:cena/@měna, '|'))
XSLT 2.0 - based verification:
<xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:o="urn:x-eshop:document-schemas:purchase-order">
<xsl:output method="text"/>
<xsl:strip-space elements="*"/>
<xsl:template match="/o:objednávka/o:položky">
<xsl:sequence select=
"contains('USD|CZK|USD', string-join(o:položka/o:cena/@měna, '|'))"/>
</xsl:template>
</xsl:stylesheet>
When this transformation is applied on the provided XML document:
<objednávka xmlns="urn:x-eshop:document-schemas:purchase-order">
<položky>
<položka kód="a">
<název>Sekačka na trávu</název>
<počet mj="ks">1</počet>
<cena měna="USD">0.9</cena>
<popis>http://example.org/sekacka.html</popis>
</položka>
<položka kód="d">
<název>Travní semeno</název>
<počet mj="kg">2.5</počet>
<cena měna="CZK">18001</cena>
</položka>
</položky>
</objednávka>
the XPath expression is evaluated and the result of this evaluation is copied to the output:
true
If the same expression is evaluated on this XML document:
<objednávka xmlns="urn:x-eshop:document-schemas:purchase-order">
<položky>
<položka kód="a">
<název>Sekačka na trávu</název>
<počet mj="ks">1</počet>
<cena měna="USD">0.9</cena>
<popis>http://example.org/sekacka.html</popis>
</položka>
<položka kód="d">
<název>Travní semeno</název>
<počet mj="kg">2.5</počet>
<cena měna="USD">18001</cena>
</položka>
</položky>
</objednávka>
then again the correct result is produced:
false