如果另一个属性的值与使用xslt存储在变量中的值匹配,则选择元素的xml属性的值

时间:2015-11-25 05:16:57

标签: xml xslt xpath xml-parsing

我有以下示例配置。我有一个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代码对我不起作用。有人可以指出错误并指出正确的方向吗?

1 个答案:

答案 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>