Как добавить несколько фильтров в инструкцию XSLT for-each?
у меня есть следующий узел XSLT:
<xsl:for-each select="Book[title != 'Moby Dick']">
....
</xsl:for-each>
однако я хотел бы использовать несколько фильтров В for-each. Я пробовал следующее, Но, похоже, это не работает:
<!-- Attempt #1 -->
<xsl:for-each select="Book[title != 'Moby Dick'] or Book[author != 'Rowling'] ">
....
</xsl:for-each>
<!-- Attempt #2 -->
<xsl:for-each select="Book[title != 'Moby Dick' or author != 'Rowling']">
....
</xsl:for-each>
3 ответов
однако я хотел бы использовать несколько фильтров в каждой
ваш реальный вопрос-XPath one: возможно ли и как указать более одного условия внутри предиката?
ответ:
да, используйте стандартные логические операторы XPath or
и and
и стандартная функция XPath not()
.
в этом конкретном случае XPath в
Если вы хотите использовать несколько предикатов, самый простой способ-просто использовать несколько предикатов. Я предполагаю, что вы действительно хотите "и", А Не"или":
<xsl:for-each select="Book[title != 'Moby Dick'][author != 'Rowling'] ">
....
</xsl:for-each>
вообще != оператора лучше избегать, потому что он имеет неожиданные эффекты, когда автор отсутствует или когда есть несколько авторов. Лучше написать:
<xsl:for-each select="Book[not(title = 'Moby Dick')][not(author = 'Rowling')] ">
....
</xsl:for-each>
по-видимому, я забыл обновить свои данные. Попытка №2 работает отлично. Надеюсь, этот пример поможет кому-то еще.
<!-- Attempt #2 -->
<xsl:for-each select="Book[title != 'Moby Dick' or author != 'Rowling']">
....
</xsl:for-each>