Как добавить несколько фильтров в инструкцию 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>