XSLT if утверждение для элемента с несколькими атрибутами - PullRequest
0 голосов
/ 04 сентября 2018

У меня есть следующий XML-код:

<MainElement name = "apple">
   <Parameter variable1 = "foo" variable2 = "bar"/>
   <Parameter variable1 = "foo" variable2 = "notBar"/>

Я использую xsl для распечатки имени MainElement, если оно содержит параметр с variable1 == "foo" и variable2 == "bar", как указано ниже:

<xsl:for-each select = "MainElement">
   <xsl:if test = "Parameter/@variable1 = 'foo' and Parameter/@variable2 = 'bar'">
      ...
   </xsl:if>
   <xsl:if test = "Parameter/@variable1 = 'foo' and Parameter/@variable2 = 'notBar'">
</xsl:for-each>

Проблема в том, что этот xsl-код не проверяет, содержит ли один элемент Parameter оба соответствующих атрибута, он просматривает оба элемента Parameter, чтобы увидеть, содержит ли один из них соответствующие атрибуты.

Я знаю, что мог бы попробовать другой метод без if, но теперь для моего собственного любопытства я хочу знать, как можно заставить оператор if искать условные атрибуты в одном конкретном элементе, а не среди обоих?

1 Ответ

0 голосов
/ 04 сентября 2018

Поместите тесты в одном тесте предикатов на Parameter.

Например, изменить

Parameter/@variable1 = 'foo' and Parameter/@variable2 = 'bar'

до

Parameter[@variable1 = 'foo' and @variable2 = 'bar']

, так что тест касается одного Parameter дочернего элемента MainElement, который имеет оба целевых значения атрибута, а не отдельных элементов Parameter, которые могут отдельно квалифицироваться.

...