Добавить несколько условий в XSLT для дочернего элемента - PullRequest
0 голосов
/ 11 октября 2018

Мне нужно отформатировать этот XML в XSLT.Мой пример не работает для второго условия.Моя задача - показать картинку, когда у меня несколько условий ("$ isMissingImg = 'false' и $ brand = 'White T-shirt'")

Это мой XML:

<?xml version="1.0" encoding="utf-8"?>
<books>
  <book>
      <a>
      <ItemFields>
        <ItemMainCategory>White T-shirt</ItemMainCategory>
      </ItemFields>
    </a>
  </book>
</books>

Это мой XSLT:

 <xsl:variable name="isMissingImg">
        <xsl:call-template name="isMissingImage">
          <xsl:with-param name="imgUrl" select="$imgSrc"/>
        </xsl:call-template>
      </xsl:variable>

      <div class="logo">
        <xsl:variable name="brand" select="books/book/a/ItemFields/ItemMainCategory"/>
        <xsl:if test="$isMissingImg = 'false'">
            <h2>Hello</h2> <!-- this condition is working--> 
            <xsl:if test="$brand = 'White T-shirt'"> <!-- this condition is NOT working--> 
          <xsl:element name="img"> 
        <xsl:attribute name="src">  
        <xsl:text>https://example.com/images/black.png</xsl:text> 
        </xsl:attribute> 
        <xsl:attribute name='border'>0</xsl:attribute> 
        </xsl:element> 
        </xsl:if>
                </xsl:if>   

            </div>

1 Ответ

0 голосов
/ 11 октября 2018

Я протестировал ваш пример, и, похоже, он будет работать, если вы сделаете свой brand путь абсолютным:

<div class="logo">
    <xsl:variable name="brand" select="/books/book/a/ItemFields/ItemMainCategory"/>
    <xsl:if test="$isMissingImg = 'false'">
        <h2>Hello</h2> <!-- this condition is working--> 
        <xsl:if test="$brand = 'White T-shirt'"> <!-- this condition is NOT working--> 
            <xsl:element name="img"> 
                <xsl:attribute name="src">  
                    <xsl:text>https://example.com/images/black.png</xsl:text> 
                </xsl:attribute> 
                <xsl:attribute name='border'>0</xsl:attribute> 
            </xsl:element> 
        </xsl:if>
    </xsl:if>   
  </div>

Кстати, вы можете упростить этот код следующим образом:

<div class="logo">
    <xsl:variable name="brand" select="/books/book/a/ItemFields/ItemMainCategory"/>
    <xsl:if test="$isMissingImg = 'false'">
        <h2>Hello</h2> 
        <xsl:if test="$brand = 'White T-shirt'">
            <img src="https://example.com/images/black.png" border="0" />
        </xsl:if>
    </xsl:if>   
</div>

Вы должны позаботиться о <xsl:if test="$isMissingImg = 'false'">.Он проверяет, имеет ли $isMissingImg строковое значение «ложь» и не логическое значение false.Имейте это в виду.

...