Проверьте, является ли строка пустой или пустой в XSLT

Попробуйте поиграть с разными строками:

with example as (select 'BC:ZDEF' as x from dual
           union select 'ABC:D' from dual
           union select 'ABC:ZE' from dual
           union select 'ZE' from dual
           union select 'ZF' from dual)
select x
from example
where REGEXP_like(x, '^(ABC:)?Z[DEF]');

Вывод:

x
ABC:ZE
ZE
ZF

Так что же происходит? Вы правы относительно ^, означающего начало строки. Оператор ? означает the thing that comes before this is optional - it should occur 1 or 0 times. В данном случае это (ABC:), поэтому часть строки является необязательной.

Тогда у нас есть Z, которое является обязательным, за которым следует выражение в скобках, что означает любой отдельный символ, указанный в скобках - так что либо D, E, либо F.

Таким образом, выражение означает «строку, начинающуюся с Z, за которой следует D, E или F, необязательно с« ABC: »в начале».

317
задан Isaac G Sivaa 25 July 2014 в 06:35
поделиться

3 ответа

test="categoryName != ''"

Редактировать : Это охватывает наиболее вероятную интерпретацию, по моему мнению, «[не] нулевого или пустого», как следует из вопроса, включая его псевдокод и мой ранний опыт работы с XSLT. То есть, «что эквивалентно следующей Java?»:

!(categoryName == null || categoryName.equals(""))

Для получения более подробной информации, например, для четкой идентификации пустого или пустого, см. ответ Джонви ниже и / или XSLT «скрипка» Я приспособился к этому ответу, который включает опцию в комментарии Майкла Кея, а также шестую возможную интерпретацию.

316
ответ дан 23 November 2019 в 01:02
поделиться

Из Пустой элемент :

Чтобы проверить, является ли значение определенного узла пустым

Это зависит от того, что вы подразумеваете под пустым.

  • Содержит нет дочерних узлов: not (node ​​())
  • Не содержит текстового содержимого: not (string (.))
  • Не содержит никакого текста, кроме пробелов: not (normalize-space ( .))
  • Не содержит ничего, кроме комментариев: not (node ​​() [not (self :: comment ())])
66
ответ дан 23 November 2019 в 01:02
поделиться

В отсутствие какой-либо другой информации я предполагаю следующий XML:

<group>
    <item>
        <id>item 1</id>
        <CategoryName>blue</CategoryName>
    </item>
    <item>
        <id>item 2</id>
        <CategoryName></CategoryName>
    </item>
    <item>
        <id>item 3</id>
    </item>
    ...
</group>

Пример использования будет выглядеть следующим образом:

<xsl:for-each select="/group/item">
    <xsl:if test="CategoryName">
        <!-- will be instantiated for item #1 and item #2 -->
    </xsl:if>
    <xsl:if test="not(CategoryName)">
        <!-- will be instantiated for item #3 -->
    </xsl:if>
    <xsl:if test="CategoryName != ''">
        <!-- will be instantiated for item #1 -->
    </xsl:if>
    <xsl:if test="CategoryName = ''">
        <!-- will be instantiated for item #2 -->
    </xsl:if>
</xsl:for-each>
266
ответ дан 23 November 2019 в 01:02
поделиться
Другие вопросы по тегам:

Похожие вопросы: