2012-11-20 1 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> 

Я не могу напечатать раздел сотрудника, чье имя embName является 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

Он работал. Спасибо. –