XSLT - если оператор не запускается в течение каждого - PullRequest
0 голосов
/ 27 апреля 2018

Я хочу сравнить значение элемента XML со строкой и назначить переменную на основе результата. Однако это не работает, поэтому я сделал оператор if в 1 = 1, или другая попытка была 1 = '1', но переменная все еще не назначена, и я предполагаю, что оператор if не запускается. Код ниже:

    <?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
<xsl:param name="id"/>
    <xsl:template match="/">    
        <xsl:if test="mainData/info/country[@name=$id]">
        <xsl:for-each select="mainData/info/country[@name=$id]">
        <xsl:if test="1 = 1"><!--should always fire-->
            <xsl:variable name="color" select='"red"'/>
        </xsl:if>
        <div class="modal-content">
            <div class="row" id="top-content">
            <div class="col 6 top-modal">
            <div class="card card-modal">
                <div class="card-image">
                    <img alt="Country Flag"><xsl:attribute name="src"><xsl:value-of select="flag" /></xsl:attribute></img>
                </div>
                <div class="card-content">
                    <span class="card-title"><xsl:value-of select="@name"/></span>
                </div>
            </div>
            </div>
            <div class="col 6 top-modal">
            <div class="card card-modal">
                <div class="card-panel blue accent-3 modal-card-info">
                    <span class="white-text">
            <h6>Region: <xsl:value-of select="facts/Region"/></h6>
            <h6>Code: <xsl:value-of select="facts/Abbreviation"/></h6>
            <h6>Capital: <xsl:value-of select="facts/Capital"/></h6>
            <h6>Languages: <xsl:value-of select="facts/Language"/></h6>
            <h6>Population: <xsl:value-of select="facts/Population"/></h6>
            <h6>Currency: <xsl:value-of select="facts/Currency"/></h6>
            <h6>All Games:</h6>
            <h6>Golds: <xsl:value-of select="medals/gold"/></h6>
            <h6>Silvers: <xsl:value-of select="medals/silver"/></h6>
            <h6>Bronze: <xsl:value-of select="medals/bronze"/></h6>
            <h6>Bronze: <xsl:value-of select="$color"/></h6><!-- check the var-->
                    </span>
                </div>
            </div>
            </div>
            </div>    
        <div class="row">
            <div class="col 10">
            <div class="card-panel blue accent-3">
                <span class="white-text"><xsl:value-of select="description"/></span>
            </div>
            </div>
        </div>
        </div>
         <div class="modal-footer">
        <a href="#!" class="modal-action modal-close waves-effect waves-green btn-flat">Close</a>
        </div>
        </xsl:for-each> 
        </xsl:if>
        <xsl:if test="not(mainData/info/country[@name=$id])">
        <div class="modal-content">
        <div class="row">
            <div class="col 10 no-data">
            <div class="card-panel center-align grey darken-3">
                <span class="white-text center-align ">No Data Available</span>
            </div>
            </div>
        </div>
        </div>
        <div class="modal-footer">
        <a href="#!" class="modal-action modal-close waves-effect waves-green btn-flat">Close</a>
        </div>
        </xsl:if>   
    </xsl:template>
</xsl:stylesheet>

1 Ответ

0 голосов
/ 27 апреля 2018

xsl:if стреляет. Ваша проблема - область действия переменной.

<xsl:if test="1 = 1"><!--should always fire-->
    <xsl:variable name="color" select='"red"'/>
</xsl:if>

Переменная color будет видна только в теле xsl:if, а не где-либо еще, поэтому ее нельзя использовать в другом месте.

Решение состоит в том, чтобы изменить его на это и поместить условие в объявление переменной

<xsl:variable name="color">
    <xsl:if test="1 = 1">
        <xsl:text>red</xsl:text>
    </xsl:if>
</xsl:variable>

Вы можете заменить это на xsl:choose, если у вас есть несколько вариантов цвета.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...