您好我想测试变量,如果可能的话,我希望它具有属性。所以我有一个XML:
<tr class="alt-row">
<td class="column-country">American Samoa <span class="type">(Mobile)</span></td>
<td class="column-rate">0.500</td>
<td class="column-vat">0.575</td>
</tr>
<tr class="">
<td class="column-country">Andorra <span class="type">(Landline)</span> <span class="free">FREE*</span> <span class="superdeal">SuperDeal!**</span></td>
<td class="column-rate">FREE*</td>
<td class="column-vat">FREE*</td>
</tr>
当td class =“column-rate”为FREE *时,我需要输入数字0,否则为正常速率。如果它可能我想要它与属性/自由= 1,速率= 0.或自由= 0,速率= 0.500。或者以正常方式:D ...没有自由......所以如果列包含FREE *,则将数字0结束.END。
我试试这个:
<country>
<xsl:variable name="country" select="normalize-space(xhtml:td[@class='column-country'])"/>
<xsl:attribute name="name">
<xsl:value-of select="normalize-space(substring-before($country, '('))"/>
</xsl:attribute>
<rate>
<xsl:variable name="type1" select="normalize-space(xhtml:td[@class = 'column-country']/xhtml:span)"/>
<xsl:variable name="type" select="translate($type1, '()', '') "/>
<xsl:variable name="price" select="normalize-space(translate(xhtml:td[@class = 'column-rate'], 'abcdefghijklmnopqrstuvwzyxABCDEFGHIJKLMNOPQRSTUVVWXYZ()*¢$€', '')) "/>
<xsl:variable name="cena">
<xsl:choose>
<xsl:when test="$price != ''">
<xsl:value-of select="$price"/>
<xsl:apply-templates select="."/>
</xsl:when>
<xsl:otherwise>
<xsl:value-of select="$VAT"/>
</xsl:otherwise>
</xsl:choose>
</xsl:variable>
<xsl:variable name="cena1" select="normalize-space(substring-before($cena, '(')) "/>
<xsl:variable name="cena2" select="normalize-space(translate(xhtml:td[@class = 'column-rate'], 'abcdefghijklmnopqrstuvwzyxABCDEFGHIJKLMNOPQRSTUVVWXYZ()*¢$€', '')) "/>
<xsl:attribute name="type">
<xsl:value-of select="$type"/>
</xsl:attribute>
<xsl:attribute name="operator">
</xsl:attribute>
<xsl:attribute name="currency">
<xsl:value-of select="$Currency"/>
</xsl:attribute>
<xsl:attribute name="vat">
<xsl:value-of select="$VAT"/>
</xsl:attribute>
<xsl:attribute name="unit">
<xsl:value-of select="$UNIT"/>
</xsl:attribute>
<xsl:value-of select="$cena2"/>
</rate>
</country>
我的输出是:
<country name="American Samoa">
<rate type="Mobile" operator="" currency="EUR" vat="0" unit="minute">0.500</rate>
</country>
<country name="Andorra">
<rate type="Landline" operator="" currency="EUR" vat="0" unit="minute"/>
</country>
但我需要:
<country name="American Samoa">
<rate type="Mobile" operator="" currency="EUR" vat="0" unit="minute">0.500</rate>
</country>
<country name="Andorra">
<rate type="Landline" operator="" currency="EUR" vat="0" unit="minute"/>0</rate>
</country>
或
<country name="American Samoa">
<rate type="Mobile" operator="" currency="EUR" vat="0" unit="minute">0.500</rate>
</country>
<country name="Andorra">
<rate type="Landline" operator="" currency="EUR" vat="0" unit="minute" free="1"/>0</rate>
</country>
但是它不能正常工作,因为当它自由时,速率是空的。
答案 0 :(得分:1)
怎么样:
...
<xsl:variable name="cena">
<xsl:choose>
<xsl:when test="number($price)">
<xsl:value-of select="$price"/>
</xsl:when>
<xsl:otherwise>
<xsl:value-of select="0"/>
</xsl:otherwise>
</xsl:choose>
</xsl:variable>
...
答案 1 :(得分:0)
您的XSLT中存在一个明确的和一个可能的错误。通过将变量price
与空字符串进行比较会导致明确的错误。由于变量是从translate
函数调用派生的,因此它实际上包含五个空格(来自FREE*
),因为translate
仅将源字符串中的每个字符替换为目标中的相应字符字符串,如果目标字符串太短,则空格为默认值。所以,我建议您将测试更改为
<xsl:when test="normalize-space($price) != ''">
然而,这样做了,你可以通过调用<xsl:apply-templates>
来合理地(取决于上下文)遇到另一个错误。你需要这个什么?我建议您删除它。