One issue is probably this line:
<xsl:variable name="aN" select="no"/>
You probably expect the variable $aN to have the value "no" but you are
selecting an element named "no" as a child of the current context, which is
very likely not present, so the value will be an empty sequence.
So you probably want:
<xsl:variable name="aN" select="'no'"/>
For this kind of issue I like to use messages to check what's going on an in
particular verify my assumptions, e.g.:
<xsl:message> + [DEBUG] $an="<xsl:value-of select="$aN"/>"</xsl:message>
("+ [DEBUG] "is just my convention for formatting messages).
This is also a case where using @as would have revealed your error:
<xsl:variable name="aN" select="no" as="xs:string"/>
This will produce a runtime error if there is no <no> element because an
empty string is not a valid value.
Cheers,
Eliot
--
Eliot Kimber
http://contrext.com
From: "Rahul Singh rahulsinghindia15(_at_)gmail(_dot_)com"
<xsl-list-service(_at_)lists(_dot_)mulberrytech(_dot_)com>
Reply-To: <xsl-list(_at_)lists(_dot_)mulberrytech(_dot_)com>
Date: Saturday, September 17, 2016 at 10:44 AM
To: <xsl-list(_at_)lists(_dot_)mulberrytech(_dot_)com>
Subject: [xsl] match and not match using If
I have created positive and negative XSLTs with below codes with match and not
match if, but not working:
1. This was when $tranFile/objects/Contact[ID__c = $aN] then need all data
with corresponding <contactID> in each record:
<xsl:stylesheet version="2.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="xml" indent="yes" omit-xml-declaration="no"/>
<xsl:strip-space elements="*"/>
<xsl:param name="tranFile" select="document('new5.xml')"/>
<xsl:template match="Informations">
<Informations>
<xsl:for-each select="Information">
<xsl:variable name="aN" select="no"/>
<xsl:if test="$tranFile/objects/Contact[ID__c = $aN]">
<xsl:copy>
<contactID><xsl:value-of
select="$tranFile/objects/Contact/Id"/></contactID>
<xsl:apply-templates/>
</xsl:copy>
</xsl:if>
</xsl:for-each>
</Informations>
</xsl:template>
<xsl:template match="@* | node()">
<xsl:copy>
<xsl:apply-templates select="@* | node()"/>
</xsl:copy>
</xsl:template>
</xsl:stylesheet>
2. And, same i have tested with negating code when
$tranFile/objects/Contact[ID_c!= $aN] :
<xsl:stylesheet version="2.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="xml" indent="yes" omit-xml-declaration="no"/>
<xsl:strip-space elements="*"/>
<xsl:param name="tranFile" select="document('new5.xml')"/>
<xsl:template match="Informations">
<xsl:choose>
<xsl:when test="$tranFile/objects = ''">
<Informations>
<xsl:copy-of select="Information"/>
</Informations>
</xsl:when>
<xsl:when test="$tranFile/objects! = ''">
<Informations>
<xsl:for-each select="Information">
<xsl:variable name="aN" select="no"/>
<xsl:if test="not($tranFile/objects/Contact[ID_c=
$aN])">
<xsl:copy>
<xsl:apply-templates select="."/>
</xsl:copy>
</xsl:if>
</xsl:for-each>
</Informations>
</xsl:when>
</xsl:choose>
</xsl:template>
<xsl:template match="@* | node()">
<xsl:copy>
<xsl:apply-templates select="@* | node()"/>
</xsl:copy>
</xsl:template>
XSL-List info and archive <http://www.mulberrytech.com/xsl/xsl-list>
EasyUnsubscribe <-list/1278982> (by
email <> )
--~----------------------------------------------------------------
XSL-List info and archive: http://www.mulberrytech.com/xsl/xsl-list
EasyUnsubscribe: http://lists.mulberrytech.com/unsub/xsl-list/1167547
or by email: xsl-list-unsub(_at_)lists(_dot_)mulberrytech(_dot_)com
--~--