XSLT: содержит () для нескольких строк

У меня есть переменная в названной XSLT variable_name на который я пытаюсь установить 1, если рассматриваемый продукт имеет атрибуты с именем A или B или обе A & B.

<xsl:variable name="variable_name">
  <xsl:for-each select="product/attributes">
    <xsl:if test="@attributename='A' or @attributename='B'">
      <xsl:value-of select="1"/>
    </xsl:if>
  </xsl:for-each>
</xsl:variable>

Есть ли любой способ соответствовать нескольким строкам с помощью, если оператор, поскольку мой просто соответствует, если A присутствует или B, присутствует. Если обе A & B присутствуют, они не устанавливают переменную на 1. Любая справка на этом ценилась бы, поскольку я - новичок в XSLT.

7
задан Tomalak 22 February 2010 в 12:13
поделиться

2 ответа

Вы можете использовать инструкцию xsl: choose, это что-то вроде switch в распространенных языках программирования:

Пример:

<xsl:variable name="variable_name">
  <xsl:for-each select="product/attributes">
  <xsl:choose>
    <xsl:when test="@attributename='A'">
      1
    </xsl:when>
    <xsl:when test=" @attributename='B'">
      1
    </xsl:when>
    <!--... add other options here-->
    <xsl:otherwise>1</xsl:otherwise>
  </xsl:choose>
  </xsl:for-each>
</xsl:variable> 

Это установит новую переменную с именем имя_переменной со значением атрибута product / attributes.

Для получения дополнительной информации ... http://www.w3schools.comwww.w3schools.com/xsl/el_choose.asp

РЕДАКТИРОВАТЬ: И еще один способ (немного грязный) по запросу OP:

<xsl:variable name="variable_name">
  <xsl:for-each select="product/attributes">
    <xsl:if test="contains(text(), 'A') or contains(text(), 'B')">
       1
    </xsl:if>
  </xsl:for-each>
</xsl:variable> 

Будет полезно, если вы предоставите xml, для которого вы пишете xslt.

14
ответ дан 6 December 2019 в 15:21
поделиться

Это может не помочь ...

«Законно» ли иметь два атрибута элемента XML с одинаковым именем (например, < element x = "1" x = "2" /> )?

Это то, что вы пытаетесь обработать? Попробуйте разобрать свой XML-файл через xmllint или что-то в этом роде, чтобы убедиться, что он действителен.

xmllint --valid the-xml-file.xml

Я предполагаю, что вы получите ошибку «атрибут переопределен».

0
ответ дан 6 December 2019 в 15:21
поделиться
Другие вопросы по тегам:

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