XSLT值不在条件中填充

时间:2012-11-20 09:39:21

标签: xslt xslt-1.0

以下是我正在使用的XML。

<employees>
    <employee>
        <empName>ABC</empName>
        <desgination>SSE</desgination>
        <age></age>
    </employee>
    <employee>
        <empName>DEF</empName>
        <desgination>VP</desgination>
        <age></age>
    </employee>
    <employee>
        <empName>GHI</empName>
        <desgination>Lead</desgination>
        <age></age>
    </employee>        
</employees>

以下是我正在使用的XSL。

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" 
     xmlns:my="some.uri" version="1.0">

    <my:EMPNames>
        <entry key="ABC">true</entry>
        <entry key="XYZ">true</entry>
        <entry key="JHK">true</entry>        
    </my:EMPNames>

    <xsl:template match="//employee[document('')/*/my:EMPNames/entry[@key = empName]]">
        <xsl:element name="{local-name()}">
            <xsl:apply-templates select="@*|node()"/>
        </xsl:element>
    </xsl:template>

    <xsl:template match="*">
        <xsl:element name="{local-name()}">
            <xsl:apply-templates select="@*|node()"/>
        </xsl:element>
    </xsl:template>
    <xsl:template match="@*">
        <xsl:attribute name="{local-name()}">
            <xsl:value-of select="."/>
        </xsl:attribute>
    </xsl:template>
</xsl:stylesheet>

我无法打印empName为ABC的员工部分。 我正在使用键值对列表。如果传入的xml empName具有列表中的值,我想打印该员工部分。不知怎的,我无法获得//employee[document('')/*/my:EMPNames/entry[@key = empName]]的价值,请你告诉我这里缺少的东西。

1 个答案:

答案 0 :(得分:2)

表达式//employee[document('')/*/my:EMPNames/entry[@key = empName]]的问题是最终的xpath谓词entry[@key = empName]。这意味着您正在寻找条目,其 @key 属性等于其子元素 empName 。换句话说,它正在条目元素下寻找 empName

你需要做的就是这个。

<xsl:template match="//employee[empName = document('')/*/my:EMPNames/entry/@key]">

或者如果您只想包含条目为真的那些,请执行此操作

<xsl:template 
    match="//employee[empName = document('')/*/my:EMPNames/entry[. = 'true']/@key]">
相关问题