[XSL-LIST Mailing List Archive Home] [By Thread] [By Date] [Recent Entries] [Reply To This Message]

RE: Inconsistent XPath Evaluation

Subject: RE: Inconsistent XPath Evaluation
From: "Michael Kay" <mhk@xxxxxxxxx>
Date: Thu, 22 Jan 2004 13:01:14 -0000
concat xpath
I suspect the problem is with your calls on position() inside the
predicate. I haven't worked through your logic enough to understand what
you expect position() to give you, but it certainly looks wrong. Perhaps
you want the position outside the predicate rather than inside it, in
which case assign it to a variable.

Michael Kay

> -----Original Message-----
> From: owner-xsl-list@xxxxxxxxxxxxxxxxxxxxxx 
> [mailto:owner-xsl-list@xxxxxxxxxxxxxxxxxxxxxx] On Behalf Of 
> Richard Patchet
> Sent: 21 January 2004 23:46
> To: xsl-list@xxxxxxxxxxxxxxxxxxxxxx
> Subject:  Inconsistent XPath Evaluation
> 
> 
> I have a transform that cross-references an external file for 
> some data. The expressions were created by copying the long 
> expressions from the first for-each loop of the transform to 
> the second for-each loop and changing just the "parentcir_" 
> literal to "childcir_" in the latter xpaths. I am using Saxon 
> 6.5.3 throughout.
> 
> I added some debugging displays between the "cmdId" attribute 
> and the "count" element unrelated to the original transform:
> 
> <?xml version="1.0" encoding="UTF-8"?>
> <xsl:transform xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
> xmlns:opl="http://www.a4networks.com/schemas/opl" 
> version="1.1" exclude-result-prefixes="xsl opl">
>   <xsl:output method="xml" version="1.0" encoding="UTF-8" 
> indent="yes"/>
>   <xsl:strip-space elements="*"/>
>   <xsl:template match="/">
>     <xsl:element name="btradeCollaborationReport">
>       <xsl:copy-of select="/btradeCollaboration/header"/>
>       <xsl:for-each 
> select="/btradeCollaboration/linkCmdList/linkCmd/link/parent[n
> ot(itemId
> != '')]">
>         <xsl:element name="cmdStatus">
>           <xsl:attribute name="cmdId">
>             <xsl:value-of select="concat('parentcir_', 
> ../../@cmdId, '-', position())"/>
>           </xsl:attribute>
>           <xsl:variable name="test" 
> select="concat('parentcir_', ../../@cmdId, '-', position())"/>
>           text:<xsl:value-of 
> select="document('dbResultDoc.xml')/ResultSet/ResultList[@quer
> y-id = concat('parentcir_', current()/../../@cmdId, '-',
> position())]/@query-id"/>:
>           var:<xsl:value-of 
> select="document('dbResultDoc.xml')/ResultSet/ResultList[@query-id =
> $test]/@query-id"/>:
>             <xsl:element name="count">
>             <xsl:value-of 
> select="document('dbResultDoc.xml')/ResultSet/ResultList[@quer
> y-id = concat('parentcir_', current()/../../@cmdId, '-', 
> position())]/Result/Row/tradeItem/updateCount"/>
>           </xsl:element>
>         </xsl:element>
>       </xsl:for-each>
>       <xsl:for-each 
> select="/btradeCollaboration/linkCmdList/linkCmd/link/child[not(itemId
> != '')]">
>         <xsl:element name="cmdStatus">
>           <xsl:attribute name="cmdId">
>             <xsl:value-of select="concat('childcir_', 
> ../../@cmdId, '-', position())"/>
>           </xsl:attribute>
>           <xsl:variable name="test" 
> select="concat('childcir_', ../../@cmdId, '-', position())"/>
>           text:<xsl:value-of 
> select="document('dbResultDoc.xml')/ResultSet/ResultList[@quer
> y-id = concat('childcir_', current()/../../@cmdId, '-',
> position())]/@query-id"/>:
>           var:<xsl:value-of 
> select="document('dbResultDoc.xml')/ResultSet/ResultList[@query-id =
> $test]/@query-id"/>:
>             <xsl:element name="count">
>             <xsl:value-of 
> select="document('dbResultDoc.xml')/ResultSet/ResultList[@quer
> y-id = concat('childcir_', current()/../../@cmdId, '-', 
> position())]/Result/Row/tradeItem/updateCount"/>
>           </xsl:element>
>         </xsl:element>
>       </xsl:for-each>
>     </xsl:element>
>   </xsl:template>
> </xsl:transform>
> 
> 
> The source XML:
> 
> <?xml version="1.0" encoding="UTF-8"?>
> <?xml-stylesheet type="text/xsl" href="t_linkPrepareDBReport.xslt"?>
> <btradeCollaboration force="true">
>   <header>
>     <username>rbat</username>
>     <transactionId>link2004-01-20T16:58:40-6:00</transactionId>
>   </header>
>   <linkCmdList>
>     <linkCmd cmdId="5" type="LINK">
>       <link>
>         <parent>
>  
> <catalogueItemReference>100444222010174442223333309840</catalo
> gueItemRef
> erence>
>         </parent>
>         <child>
>  
> <catalogueItemReference>000444219010034442223333309840</catalo
> gueItemRef
> erence>
>         </child>
>       </link>
>     </linkCmd>
>     <linkCmd cmdId="6" type="LINK">
>       <link>
>         <parent>
>  
> <catalogueItemReference>100444222011164442223333309840</catalo
> gueItemRef
> erence>
>         </parent>
>         <child>
>  
> <catalogueItemReference>000444219210014442223333309840</catalo
> gueItemRef
> erence>
>         </child>
>       </link>
>     </linkCmd>
>   </linkCmdList>
> </btradeCollaboration>
> 
> 
> The cross-reference file:
> 
> <?xml version="1.0" encoding="UTF-8"?>
> <ResultSet resultLists="14" 
> correlation-id="link2004-01-20T16:58:40-6:00">
>   <ResultList results="1" query-id="parentcir_5-5">
>     <Result rows="1">
>       <Row cols="1">
>         <tradeItem>
>           <id>298</id>
>           <status>1</status>
>           <updateCount>0</updateCount>
>         </tradeItem>
>       </Row>
>     </Result>
>   </ResultList>
>   <ResultList results="1" query-id="parentcir_6-6">
>     <Result rows="1">
>       <Row cols="1">
>         <tradeItem>
>           <id>299</id>
>           <status>1</status>
>           <updateCount>0</updateCount>
>         </tradeItem>
>       </Row>
>     </Result>
>   </ResultList>
>   <ResultList results="1" query-id="childcir_5-1">
>     <Result rows="1">
>       <Row cols="1">
>         <tradeItem>
>           <id>294</id>
>           <status>1</status>
>           <updateCount>0</updateCount>
>         </tradeItem>
>       </Row>
>     </Result>
>   </ResultList>
>   <ResultList results="1" query-id="childcir_6-2">
>     <Result rows="1">
>       <Row cols="1">
>         <tradeItem>
>           <id>296</id>
>           <status>1</status>
>           <updateCount>0</updateCount>
>         </tradeItem>
>       </Row>
>     </Result>
>   </ResultList>
> </ResultSet>
> 
> 
> The output:
> 
> <?xml version="1.0" encoding="UTF-8"?> <btradeCollaborationReport>
>    <header>
>       <username>rbat</username>
>       <transactionId>link2004-01-20T16:58:40-6:00</transactionId>
>    </header>
>    <cmdStatus cmdId="parentcir_5-1">
>           text:parentcir_5-1:
>           var:parentcir_5-1:
>             <count>0</count>
>    </cmdStatus>
>    <cmdStatus cmdId="parentcir_6-2">
>           text:parentcir_6-2:
>           var:parentcir_6-2:
>             <count>0</count>
>    </cmdStatus>
>    <cmdStatus cmdId="childcir_5-1">
>           text::
>           var:childcir_5-1:
>             <count/>
>    </cmdStatus>
>    <cmdStatus cmdId="childcir_6-2">
>           text::
>           var:childcir_6-2:
>             <count/>
>    </cmdStatus>
> </btradeCollaborationReport>
> 
> 
> It makes no sense to me why the xpath expression works for 
> with "parentcir_" but not "childcir_" and that it works with 
> the concat() in a variable but not in the xpath.
> 
> What am I missing here?
> 
> Richard Patchet
> bTrade, Inc.
> 2324 Gateway Drive
> Irving, TX 75063
> 972-5802981
> www.bTrade.com
> 
>  XSL-List info and archive:  http://www.mulberrytech.com/xsl/xsl-list
> 


 XSL-List info and archive:  http://www.mulberrytech.com/xsl/xsl-list


Current Thread

PURCHASE STYLUS STUDIO ONLINE TODAY!

Purchasing Stylus Studio from our online shop is Easy, Secure and Value Priced!

Buy Stylus Studio Now

Download The World's Best XML IDE!

Accelerate XML development with our award-winning XML IDE - Download a free trial today!

Don't miss another message! Subscribe to this list today.
Email
First Name
Last Name
Company
Subscribe in XML format
RSS 2.0
Atom 0.3
Site Map | Privacy Policy | Terms of Use | Trademarks
Free Stylus Studio XML Training:
W3C Member
Stylus Studio® and DataDirect XQuery ™are products from DataDirect Technologies, is a registered trademark of Progress Software Corporation, in the U.S. and other countries. © 2004-2013 All Rights Reserved.