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

Re: XPath behaves differently when opened by document(

Subject: Re: XPath behaves differently when opened by document()
From: Wolfgang Laun <wolfgang.laun@xxxxxxxxx>
Date: Mon, 2 Aug 2010 16:35:12 +0200
Re:  XPath behaves differently when opened by document(
If your stylesheet is meant to do some lookup in the secondary source based
on data in the primary source I recommend that you do not try to use
apply-templates for the lookup but switch to call-template, passing in
parameters taken from the primary document.

-W


On 2 August 2010 16:34, Wolfgang Laun <wolfgang.laun@xxxxxxxxx> wrote:
>
> If your stylesheet is meant to do some lookup in the secondary source based
on
> date in the primary source I recommend that you do not try to use
apply-templates
> for the lookup but switch to call-template, passing in parameters taken
from
> the primary document.
>
> -W
>
> On 2 August 2010 16:11, Jack Bush <netbeansfan@xxxxxxxxxxxx> wrote:
>>
>> Hi All,
>>
>> There appears to be 2 undesirable features/effects felt when opening
secondary
>> document using document() function in XSLT 2.0 (Saxon 9.1) on Windows XP.
Let's
>> examine the stylesheet in question as follows:
>>
>> 1 <xsl:param name="FILE_LIST_PARAM" as="xs:string*" required="no"
select="()"/>
>> 2 <xsl:param name="COMPANY_NAME_PARAM"/>
>> 3
>> 4 <xsl:template match="/">
>> 5 <employee-profile>
>> 6 <company_name><xsl:value-of
select="$COMPANY_NAME_PARAM"/></company_name>
>> 7 <xsl:for-each select="document($FILE_LIST_PARAM)/ns:html/ns:body/ns:div">
//
>> secondary source
>> 8 <xsl:for-each
>>
select="/ns:html/ns:body/ns:div[@id='content']/ns:table[@class='sresults']/ns
:tr/ns:td/ns:a">
>>  // main source
>> 9 <employee_name><xsl:value-of
>> select="substring-before(@title,',')"/></employee_name> // main source
>> 10 <employee_address><xsl:value-of select="@href"/></employee_address> //
main
>> source
>> 11 </xsl:for-each> // main source
>> 12   <xsl:apply-templates/> // secondary source
>> 13 </xsl:for-each> // secondary source
>> 14 </employee-profile>
>> 15 </xsl:template>
>> 17
>> 18 <xsl:template match="ns:html/ns:body/ns:div">
>> 19 <financial_status>
>> 20 <xsl:variable name="salary" select="//ns:p[ns:strong='Salary:']"/>
>> 21 <xsl:apply-templates select="$salary"/>
>> 22 <xsl:if test="empty($salary)">
>> 23 <salary>Unknown</salary>
>> 24 </xsl:if>
>> ......
>> 35 </financial_status>
>> 36 </xsl:template>
>> 37
>> 38 <xsl:template match="ns:p[ns:strong='Salary:']">
>> 39 <xsl:for-each select="ns:a">
>> 40 <salary><xsl:value-of select="."/></salary>
>> 41 </xsl:template>
>> ..........
>> 55 <xsl:template match="ns:p"/>
>> 56
>> 57 </xsl:stylesheet>
>>
>> ( i ) document() needs more specific detail XPath statement to lookup the
desire
>> node. Otherwise, the data for every single subnodes will be retrieved
before
>> getting to target node. For instance, line 7 would include irrelevant data
that
>> is part of subnodes along the path of getting to the destination node.
>>
>> ( ii ) On the other hand, yet when providing specific XPath instruction
would
>> appears to query every nodes under the specified branch which is
preventing
>> their individual templates from being run altogether. Again, if line 7 were
to
>> changed from:
>>
>> 7 <xsl:for-each
select="document($FILE_LIST_PARAM)/ns:html/ns:body/ns:div">
>>                                                     to
>> 7 <xsl:for-each
select="document($FILE_LIST_PARAM)/ns:html/ns:body/ns:div/p"> or
>> <xsl:for-each
select="document($FILE_LIST_PARAM)/ns:html/ns:body/ns:div//p">
>>
>>
>> where all the data is located in each <p> node but would no longer execute
line
>> 18 - 55, which was the original working stylesheet used to open the same
>> document as primary source.
>>
>> In addition, I am also having difficulty getting data (switching between
>> documents) from main and secondary documents using nested for-each loop
(line 7
>> - 11). The result is that only the outer loop (7, 12-13; refer to
secondary
>> document) is being taken effect but not the internal loop (8 - 11; refer to
main
>> source).
>>
>> Hope I haven't confused everyone already.
>>
>> Any suggestion would be much appreciated.
>> Thanks in advance,
>> Jack

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.