2012-11-20 82 views
1

下面是我正在使用的XML。未在條件中填充的XSLT值

<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]]的價值,請你讓我知道我在這裏失蹤。

回答

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]"> 
+0

它的工作。謝謝。 –