Как сравнить строки с учетом регистра в атрибуте xforms: select1 ref?

Я должен предоставить значение атрибута ref в an xf:select1. Мне нужно выбрать имена свойств, только если они присутствуют в supportedPropertiesэкземпляре, который может быть сделан со следующим:

<xf:select1
    ref="
        instance('properties')/property[
            name = instance('supportedProperties')/property/name
        ]/name">

Однако проблема в том, что supportedPropertiesможет содержать имена, которые находятся в заглавных буквах. Предположим, что мы не можем изменить экземпляр, есть ли способ выполнить сравнение с учетом регистра?

Пытался использовать функцию lower-case()XPath следующим образом, но это не сработало:

<xf:select1
    ref="
        instance('properties')/property[
            name = instance('supportedProperties')/property/name
        ]/lower-case(name)">

1 ответ

  1. Предполагая, что вы используете XPath 2, Вы можете написать:

    <xf:select1
        ref="
            instance('properties')/property[
                name = instance('supportedProperties')/property/name/lower-case(.)
            ]/name">
    

    Это делает, что lower-case(.)функция применяется ко всем элементам в последовательности, возвращаемой instance('supportedProperties')/property/name.

    Вы также можете написать его:

    <xf:select1
        ref="
            instance('properties')/property[
                name = (
                    for $name in instance('supportedProperties')/property/name
                    return lower-case($name)
                )
            ]/name">