开发者

XSLT: contains() for multiple strings

开发者 https://www.devze.com 2022-12-21 01:26 出处:网络
I have a variable in XSLT called variable_name which I am trying to set to 1, if the Product in question has attributes with name A or B or both A & B.

I have a variable in XSLT called variable_name which I am trying to set to 1, if the Product in question has attributes with name A or B or both A & B.

<xsl:variable name="variable_name">
  <xsl:for-each select="product/attributes">
    <xsl:if test="@attrib开发者_Go百科utename='A' or @attributename='B'">
      <xsl:value-of select="1"/>
    </xsl:if>
  </xsl:for-each>
</xsl:variable>

Is there any way to match multiple strings using the if statement, as mine just matches if A is present or B is present. If both A & B are present, it does not set the variable to 1. Any help on this would be appreciated as I am a newbie in XSLT.


You can use xsl:choose statement, it's something like switch in common programming languages:

Example:

<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> 

This will set new variable with name variable_name with the value of attribute product/attributes.

For more info ... http://www.w3schools.comwww.w3schools.com/xsl/el_choose.asp

EDIT: And another way (a little dirty) by OP's request:

<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> 

It will be helpful if you provide the xml you're writing your xslt against.


This might not help...

Is it 'legal' to have two XML element attributes with the same name (eg. <element x="1" x="2" />)?

Is this what you are trying to process? Try parsing your XML file through xmllint or something like it to see if it is valid.

xmllint --valid the-xml-file.xml

My guess is that you will get a 'attribute redefined' error.

0

精彩评论

暂无评论...
验证码 换一张
取 消