我在使用XSL语句时遇到了另一个问题。我试图添加一个条件,以便如果找到某个值,在这个实例'call'中,它的行为略有不同。我知道这是一件很简单的事情,我做错了但不知道是什么!
基本上在下面的代码中似乎返回了正确的布尔值,但是它继续并且仍然将调用成本措辞。类和URL位置都正确输出。
提前致谢!
XML
<rhs_options>
<title>RHS title</title>
<service>
<option>call</option>
<text>telephone number text</text>
<telephone>telephone number</telephone>
<link>telephone number link</link>
</service>
<service>
<option>branch</option>
<text>branch text</text>
<telephone/>
<link>branch link</link>
</service>
<service>
<option>online</option>
<text>online text</text>
<telephone/>
<link>online link</link>
</service>
XSL
<aside class="cta">
<h4><xsl:value-of select="/Properties/Data/Datum[@ID='ID1']/DCR[@Type='RHS_Options']/rhs_options/title"/></h4>
<xsl:for-each select="/Properties/Data/Datum[@ID='ID1']/DCR[@Type='RHS_Options']/rhs_options/service">
<xsl:choose>
<xsl:when test="/Properties/Data/Datum[@ID='ID1']/DCR[@Type='RHS_Options']/rhs_options/service/option='call'">
<p class="{./option}">
<xsl:value-of select="./text"/>
<br/>
<xsl:value-of select="./telephone"/>
<br/>
<a href="{./link}">
Call charges
</a>
</p>
</xsl:when>
<xsl:when test="/Properties/Data/Datum[@ID='ID1']/DCR[@Type='RHS_Options']/rhs_options/service/option='phone'or'online'">
<p class="{./option}">
<a href="{./link}">
<xsl:value-of select="./text"/>
</a>
</p>
</xsl:when>
</xsl:choose>
</xsl:for-each>
答案 0 :(得分:1)
你想要:
<xsl:choose>
<xsl:when test="option='call'">
<p class="{option}">
<xsl:value-of select="text"/>
<br/>
<xsl:value-of select="telephone"/>
<br/>
<a href="{link}">
Call charges
</a>
</p>
</xsl:when>
<xsl:when test="option='phone' or option = 'online'">
<p class="{option}">
<a href="{link}">
<xsl:value-of select="text"/>
</a>
</p>
</xsl:when>
</xsl:choose>
<强>解释强>:
提供的代码的问题是使用了绝对 XPath表达式,但是必须使用 relative Xpath表达式。
当然,使用`xsl:for-each *和 not 来使用任何显式XSLT条件指令更好 。< / p>
以下是相同但更紧凑和可维护的代码:
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output omit-xml-declaration="yes" indent="yes"/>
<xsl:strip-space elements="*"/>
<xsl:template match="/*">
<aside class="cta">
<h4><xsl:value-of select="title"/></h4>
<xsl:apply-templates/>
</aside>
</xsl:template>
<xsl:template match="service[option='call']">
<p class="{option}">
<xsl:value-of select="text"/>
<br/>
<xsl:value-of select="telephone"/>
<br/>
<a href="{link}">
Call charges
</a>
</p>
</xsl:template>
<xsl:template match="service">
<p class="{option}">
<a href="{link}">
<xsl:value-of select="text"/>
</a>
</p>
</xsl:template>
</xsl:stylesheet>
在提供的XML文档上应用此转换时:
<rhs_options>
<title>RHS title</title>
<service>
<option>call</option>
<text>telephone number text</text>
<telephone>telephone number</telephone>
<link>telephone number link</link>
</service>
<service>
<option>branch</option>
<text>branch text</text>
<telephone/>
<link>branch link</link>
</service>
<service>
<option>online</option>
<text>online text</text>
<telephone/>
<link>online link</link>
</service>
</rhs_options>
产生了想要的结果:
<aside class="cta">
<h4>RHS title</h4>RHS title<p class="call">telephone number text<br/>telephone number<br/>
<a href="telephone number link">
Call charges
</a>
</p>
<p class="branch">
<a href="branch link">branch text</a>
</p>
<p class="online">
<a href="online link">online text</a>
</p>
</aside>