У меня есть переменная в названной 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.
Вы можете использовать инструкцию 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.
Это может не помочь ...
«Законно» ли иметь два атрибута элемента XML с одинаковым именем (например, < element x = "1" x = "2" />
)?
Это то, что вы пытаетесь обработать? Попробуйте разобрать свой XML-файл через xmllint или что-то в этом роде, чтобы убедиться, что он действителен.
xmllint --valid the-xml-file.xml
Я предполагаю, что вы получите ошибку «атрибут переопределен».