我有以下示例配置。我有一个xsl,其中我有空间分隔范围(getAccoutInfo getCustomerInfo)存储在变量'范围'中,您在范围元素内部作为单独的输入属性看到的内容。我使用str:tokenize
对它们进行标记<scopes>
<scope input="getAccountInfo" output="Account_Information"/>
<scope input="getCustomerInfo" output="Customer_Information"/>
</scopes>
<xsl:variable name="scopes" select="str:tokenize($scope, ' ')"/>
<ul style="list-style-type:disc">
<li>
<font size="2" style="font-family:verdana">
<xsl:apply-templates select="$scopes[position()]"/>
</font>
</li>
</ul>
我正在尝试打印相应&#39;输出的值。输入的属性&#39;使用&#34; apply-templates&#34;在上面的配置中看到的属性为子弹点。个人令牌。模板复制如下。
<xsl:template match="token">
<xsl:if test="$scopeMapping/*[local-name()='scopes']/*[local-name()='scope']/@*[local-name()='input']/text() = normalize-space(.)">
<xsl:value-of select="$scopeMapping/*[local-name()='scopes']/*[local-name()='scope']/@*[local-name()='output']/text()"/>
</xsl:if>
</xsl:template>
但看起来xsl代码对我不起作用。有人可以指出错误并指出正确的方向吗?
答案 0 :(得分:0)
如果您只是想选择scope
属性出现在标记化input
变量中的scopes
元素,那么这个简单的表达式应该可以解决这个问题....
<xsl:for-each select="//scopes/scope[@input = $scopes]">
试试这个XSLT
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0"
xmlns:str="http://exslt.org/strings"
extension-element-prefixes="str">
<xsl:output method="html" indent="yes" />
<xsl:param name="scope" select="'getCustomerInfo getAccountInfo'" />
<xsl:template match="/">
<xsl:variable name="scopes" select="str:tokenize($scope, ' ')"/>
<ul>
<xsl:for-each select="//scopes/scope[@input = $scopes]">
<li>
<xsl:value-of select="@output" />
</li>
</xsl:for-each>
</ul>
</xsl:template>
</xsl:stylesheet>
应用于以下输入
<scopes>
<scope input="getAccountInfo" output="Account_Information"/>
<scope input="getCustomerInfo" output="Customer_Information"/>
</scopes>
以下是输出:
<ul>
<li>Account_Information</li>
<li>Customer_Information</li>
</ul>