OASIS Mailing List ArchivesView the OASIS mailing list archive below
or browse/search using MarkMail.

 


Help: OASIS Mailing Lists Help | MarkMail Help

 


 

   RE: [xml-dev] XPath error with Xalan

[ Lists Home | Date Index | Thread Index ]
  • To: "David Carlisle" <davidc@nag.co.uk>
  • Subject: RE: [xml-dev] XPath error with Xalan
  • From: "Thomson, Alisa" <Thomson@fhlb-of.com>
  • Date: Fri, 5 Nov 2004 09:12:46 -0500
  • Cc: <xml-dev@lists.xml.org>
  • Thread-index: AcTDOB6cywMimEJ1StGV9el5uCPA8gACSQrA
  • Thread-topic: [xml-dev] XPath error with Xalan

Thanks for the suggestion..that is what I want to do.  Unfortunately,
just like before this works great in XMLSpy with their default MS XSLT
engine, but when I use Xalan, it blows up.  It is a new error though.
This time it is a NullPointerException.

Thanks,
Ci-Ci 

-----Original Message-----
From: David Carlisle [mailto:davidc@nag.co.uk] 
Sent: Friday, November 05, 2004 8:05 AM
To: Thomson, Alisa
Cc: xml-dev@lists.xml.org
Subject: Re: [xml-dev] XPath error with Xalan


  Here are two samples of methods I tried:

    <xsl:if test="Determination[. != '']">
      <xsl:apply-templates select="Determination"/> 
    </xsl:if>

    <xsl:if test="string()">
      <xsl:apply-templates select="Determination"/> 
    </xsl:if>

Neither of those should generate an Xpath syntax error, but they do
different things. the first tests if the string value of any
Determination child of the current node is non empty.

the second is equivalent to
test="string(.)"
and tests if the string value of the current node is non empty.

so given

<foo>
  <Determination/>
</foo>

the first form would test false and so not apply templates, but the
second would test true as the string value of foo is a newline two
spaces and another newline, so would apply templates to the empty
Determination child.

Note that if there is a possiblility of more than one Determination
child most likely neither form does what you want,

<foo>
  <Determination>abc</Determination>
  <Determination/>
</foo>



    <xsl:if test="Determination[. != '']">
      <xsl:apply-templates select="Determination"/> 
    </xsl:if>

the test here is true as there is a non-empty Determination so you apply
templates to both Determination elements, including the empty one.

If you just want to apply templates to non-empty Determination, you dont
need an xsl:if, just don't select the ones that you don't want to
process:

   <xsl:apply-templates select="Determination[. != '']"/> 

David

________________________________________________________________________
This e-mail has been scanned for all viruses by Star. The service is
powered by MessageLabs. For more information on a proactive anti-virus
service working around the clock, around the globe, visit:
http://www.star.net.uk
________________________________________________________________________




 

News | XML in Industry | Calendar | XML Registry
Marketplace | Resources | MyXML.org | Sponsors | Privacy Statement

Copyright 2001 XML.org. This site is hosted by OASIS