XPath: сопоставить целое слово (используя функцию совпадений с флагом без учета регистра)

Используя XPath, я бы хотел "Совпадение всего слова" (опция для пользователя, как в поиске VS).

Кажется, как будто функцииcontains а такжеmatches работать аналогично, хотя совпадения учитывают такие флаги, какi для нечувствительности к регистру.

Другими словами, я получаю одинаковые результаты с этими двумя запросами XPath:

<code><pets>
    <dog name="Rupert" color="grey"/>
    <dog name="Ralph" color="brown"/>
    <cat name="Marvin the Cat" color="white"/>
    <cat name="Garfield the Cat" color="orange"/>
    <cat name="Cat" color="grey"/>
    <cat name="Fluffy" color="black"/>
</pets>

Matches XPath: //cat[descendant-or-self::*[@*[matches(.,'Cat')]]]
    returns:
    <cat name="Marvin the Cat" color="white"/>
    <cat name="Garfield the Cat" color="orange"/>
    <cat name="Cat" color="grey"/>


Contains XPath: //cat[descendant-or-self::*[@*[contains(.,'Cat')]]]
    returns:
    <cat name="Marvin the Cat" color="white"/>
    <cat name="Garfield the Cat" color="orange"/>
    <cat name="Cat" color="grey"/>
</code>

Но я хотел бы использоватьmatches возвращать результаты, которые соответствуют & quot; Cat & quot; только целое слово:

<code><cat name="Cat" color="grey"/>
</code>

Как настроить запрос на совпадение, чтобы он соответствовал целому слову?

EDIT: I forgot to mention that I need to still use the matches function because I need the case insensitivity flag.

Ответы на вопрос(5)

Ваш ответ на вопрос