Как уже отмечали другие, это недопустимый XPath (или XSLT).
Однако в XPath 2.0 есть оператор ne
, что означает «не равно». Это похоже на !=
, но применяется к отдельным атомарным значениям вместо наборов узлов (экзистенциальное сравнение).
Очень похоже, что ne
- это то, что предназначено, но знаки $
следует заменить пробелами.
<xsl:for-each select="./HEADER/META
[(./VALUE[not(text()='')]) and
(./@domain ne 'PPPI_PROCESS_ORDER') and
(./@domain ne 'PPPI_PROCESS_ORDER_TEXT') and
(./@domain ne 'PPPI_MATERIAL') and
(./@domain ne 'PPPI_MATERIAL_SHORT_TEXT')]">
Интересно, что случилось с ней, когда ne
окружили $
.
Есть несколько других вещей, которые вы могли бы сделать, чтобы сделать код менее многословным, но это не предмет вашего вопроса.