在我的XSLT电子表格中,我需要根据xml节点的值定义一个或多个值的xsl:变量.下面的代码显示了我正在尝试做的事情.我想用这种方式定义多个变量.
一个主要问题是,为了根据每个项目的节点值选择变量值,必须在xsl:foreach中进行选择,每当我尝试在xsl中定义变量时:foreach它会显示错误.
<xsl:for-each select="WORKS/item">
<xsl:variable name="rate1">
<xsl:choose>
<xsl:when test="rental='new'">
<xsl:value-of select="'.15'" />
</xsl:when>
<xsl:when test="rental='used'">
<xsl:value-of select="'.30'" />
</xsl:when>
</xsl:choose>
</xsl:variable>
<xsl:variable name="rent1" select="{$rate1}">
Run Code Online (Sandbox Code Playgroud)
我想通过更改变量值来实现这一目的的原因是因为这些变量随后在数学函数中使用,该函数将变量乘以节点值(价格),该值将与每个变量不同.以下是一旦定义了变量的方法.非常感谢你.
<div class="rental-period">1-4 Days:</div>
<div class="rental-price"><em>$ <xsl:value-of select='format-number( (100*(price * $rent1) div 100), "###.00" )'/></em></div>
<div class="rental-period">5-7 Days:</div>
<div class="rental-price"><em>$ <xsl:value-of select='format-number( (100*(price * $rent2) div 100), "###.00" )'/></em></div>
<div class="rental-period">8-14 Days:</div>
<div class="rental-price"><em>$ <xsl:value-of select='format-number( (100*(price * $rent3) div 100), "###.00" )'/></em></div>
Run Code Online (Sandbox Code Playgroud)
更新: 好的.我已经尝试过Dark Falcon下面提供的解决方案,但它一直给我一个错误"打开和结束标签不匹配".和以前一样的错误.它似乎不喜欢xsl:选择我拥有它的位置,因为这些行号是错误来自的地方.这是所有相关的样式表代码:
<xsl:template name="showPrice">
<xsl:param name="rentalRate"/>
<div class="rental-price"><em>$ <xsl:value-of select='format-number( (100*(price * …Run Code Online (Sandbox Code Playgroud) 现在我使用Javascript(在基于Wordpress的网站中)使用XSLT样式表转换XML文档.这适用于Firefox和Chrome,但不适用于IE.另外,如果未启用Javascript,则不会显示任何内容.
所以,我的目标是在服务器而不是客户端上进行XML/XSLT到XHTML的转换,最好是使用PHP.
我尝试了许多其他人编写的PHP脚本(我是新手),但我无法让他们工作.我已经包含了我在下面找到的最简单的PHP脚本.我知道动态文件路径可能有问题,但我不知道找到XML和XSLT文件的更好方法.
当我使用下面的脚本时,我收到错误:解析错误:语法错误,第42行/home/alan/public_html/wp-content/themes/Stacked/page-renting.php中的意外T_STRING
也欢迎替代解决方案.
<?php
$xml = new DOMDocument();
$xml->load('<?php bloginfo('template_directory'); ?>/rentals/works.xml');
$xsl = new DOMDocument;
$xsl->load('<?php bloginfo('template_directory'); ?>/rentals/works.xsl');
$proc = new XSLTProcessor();
$proc->importStyleSheet($xsl);
echo $proc->transformToXML($xml);
?>
Run Code Online (Sandbox Code Playgroud)