xsl-list
[Top] [All Lists]

Re: [xsl] match and not match using If

2016-09-17 12:36:21
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
--~--
<Prev in Thread] Current Thread [Next in Thread>
  • [xsl] match and not match using If, Rahul Singh rahulsinghindia15(_at_)gmail(_dot_)com
    • Re: [xsl] match and not match using If, Eliot Kimber ekimber(_at_)contrext(_dot_)com <=