我有这样的地图,我必须检查姓名' A'在那里和名字' E'在这张地图中不存在,那么我必须做点什么。如何检查xml中的同一节点名称'以及其他一些价值观如何' X'是否存在。
<Map>
<Employee>
<name>A</name>
<id>1</id>
<role>SE</role>
</Employee>
<Employee>
<name>B</name>
<id>2</id>
<role>SE</role>
</Employee>
<Employee>
<name>C</name>
<id>3</id>
<role>SE</role>
</Employee>
<Employee>
<name>D</name>
<id>4</id>
<role>SSE</role>
</Employee>
<Employee>
<name>E</name>
<id>5</id>
<role>SSE</role>
</Employee>
答案 0 :(得分:0)
您可以检查是否有名为&#34; A&#34;的员工。通过测试(从父节点的上下文):
test="Employee[name='A']"
例如,以下样式表:
XSLT 1.0
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform" >
<xsl:output method="xml" version="1.0" encoding="UTF-8" indent="yes"/>
<xsl:template match="/Map">
<result>
<xsl:if test="Employee[name='A']">YES</xsl:if>
</result>
</xsl:template>
</xsl:stylesheet>
将返回:
<?xml version="1.0" encoding="UTF-8"?>
<result>YES</result>
应用于测试输入:
<Map>
<Employee>
<name>X</name>
</Employee>
<Employee>
<name>A</name>
</Employee>
<Employee>
<name>B</name>
</Employee>
</Map>
我必须测试两个条件1&gt;名称&#39; A&#39;存在且名称&#39; Z&#39;不是 本
这是一个微不足道的扩展:
test="Employee[name='A'] and not(Employee[name='Z'])"
答案 1 :(得分:0)
我认为您所寻找的是一种匹配所有<Map>
个节点的方法,其中<Employee>
节点具有<Name>
='A',以及否 <Employee>
节点<Name>
='X'。
要使用apply-templates
执行此操作,您只需要一个这样的简单模板:
<xsl:template match="/Map[Employee/name = 'A' and not (Employee/name = 'X')]">
<!-- Do whatever you want with the <Map> node here -->
</xsl:template>
如果您将其作为其他逻辑的一部分,您也可以使用<xsl:for-each>
(或<xsl:if>
或<xsl:when>
),如下所示:
<xsl:for-each select="/Map[Employee/name = 'A' and not (Employee/name = 'X')]">
<!-- Do whatever you want with the <Map> node here -->
</xsl:for-each>
如果您希望能够指定任意值,可以使用<xsl:call-template>
。首先,定义您的模板:
<xsl:template name="DoSomething">
<xsl:param name="includes" />
<xsl:param name="does_not_include" />
<xsl:if test="/Map[Employee/name = $includes and not (Employee/name = $does_not_include)]">
<!-- Do whatever you want with the <Map> node here -->
</xsl:if>
</xsl:template>
然后调用您的模板:
<xsl:call-template name="DoSomething">
<xsl:with-param name="includes" select="'A'" />
<xsl:with-param name="does_not_include" select="'X'" />
</xsl:call-template>