未在条件中填充XSLT值
下面是我正在使用的XML未在条件中填充XSLT值,xslt,xslt-1.0,Xslt,Xslt 1.0,下面是我正在使用的XML <employees> <employee> <empName>ABC</empName> <desgination>SSE</desgination> <age></age> </employee> <employee> <empName>DEF<
<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>
<?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>
基础知识
上海证券交易所
DEF
副总裁
GHI
领导
下面是我正在使用的XSL
<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>
<?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部分。不知何故,我无法获取
//employee[document(“”)/*/my:EMPNames/entry[@key=empName]]
请告诉我我这里缺少什么。表达式//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]">