Re: [xsl] Using doc( ) to get a second input file

Subject: Re: [xsl] Using doc( ) to get a second input file
From: "Imsieke, Gerrit, le-tex gerrit.imsieke@xxxxxxxxx" <xsl-list-service@xxxxxxxxxxxxxxxxxxxxxx>
Date: Tue, 14 Apr 2015 20:31:08 -0000
Hi Craig,

The problem may be that you have a template that matches / and that will
be invoked a second time when processing $myActionSet.

Your attempt at putting doc('b&')//actionSet[b&] in a variable will
probably have the effect that the variable contents will be wrapped in a
document node and this will then be processed by the template that
matches /, too.

<xsl:variable name="myActionSet" select="doc('b&')//actionSet"/> is
tantamount to:

<xsl:variable name="myActionSet" as="documentnode(element(actionSet))">
  <xsl:document>
    <xsl:sequence select="doc('b&')//actionSet"/>
  <xsl:document>
</xsl:variable>

and there you have the document node that your / template matches when
you process $myActionSet.

Just check it by outputting $myActionSet/*/name() b actionSet and
$myActionSet/name() b (empty sequence).

So better declare myActionSet as="element(actionSet)" in first place
(itbs always good practice to use the as="b&" attribute) or
alternatively, if it is the document node, use apply-templates
select="$myActionSet/actionSet".

Gerrit

On 14.04.2015 22:15, Craig Sampson craig.sampson@xxxxxxx wrote:
> Hi All,
> 
>   I am trying to use the doc( ) function, in XSLT 2.0, to get a second
> input file in one of my transforms. The primary input contains an
> element brefActionSetb that triggers the logic to fetch the second input.
> 
>  
> 
>   Within that template I do:
> 
>  
> 
>         *<**xsl:variable **name*=/"myActionSet" /
> 
> /          /*select*=/"doc('file://sashq/root/pub/pubs_xiswork/sascrs/prod/v16/eclipse/workspace/castest/xml/actions.xml')"/*/>*
> 
>  
> 
>   Which is successfully getting the second file. I know this because I
> can write out to the log the contents of the file and I see the text (no
> markup).
> 
>  
> 
>   But when I try to process this second file using:
> 
>  
> 
>         *<**xsl:apply-templates **select*=/"$myActionSet"/*/>*
> 
>  
> 
>   My transform fails due to the root element template being executed a
> second time. In the root template I setup some java extension processes
> that can only be run once so the second time through they cause the
> transform to fail.
> 
>  
> 
>   Ibve tried to solve the problem two different ways, but neither works.
> First I tried adding a xpath specification to the doc function so that
> the returned XML would start at the element I was interested in, like so:
> 
>  
> 
>         *<**xsl:variable **name*=/"myActionSet" /
> 
> /          /*select*=/"doc('file://sashq/root/pub/pubs_xiswork/sascrs/prod/v16/eclipse/workspace/castest/xml/actions.xml')//actionSet[@id=babcb]"/*/>*
> 
> * *
> 
> but that caused the function to fail and not fetch the second file. I
> also tried a fragment specification b#actionSetb but this also failed.
> 
>  
> 
>   I then tried to kick the second input files root element out of my
> root template with a test for ancestor-or-self::casActions and a test
> for descendant-or-self::casActions. But neither of these tests worked on
> the fetched second file.
> 
>  
> 
>   Any help would be appreciated in solving this problem.
> 
>  
> 
>  
> 
> Herebs a few lines from the second input file that I am trying to
> process. It does have a namespace and I wonder if that could be part of
> the problem since my first input file is in no namespace.
> 
>  
> 
>  
> 
> <?xml version="1.0" encoding="UTF-8"?>
> 
> <casActions version="1.0" xml:lang="en"
> xmlns="http://www.sas.com/xml/namespace/sas_doc_cas_actions-1.0";
> date="Tue Apr 14 07:31:01 2015" branch="v9cas">
> 
>    <actionSet id="cas.tkds1" date="Mon Apr 13 22:18:33 2015"
> name="tkds1" dvdname="cas" scriptname="tkds1" prmname="tkds1">
> 
>       <label id="cas.tkds1.__label" key="TKDS1_LABEL_LIBRARY" dvd="cas"
> msgfile="tkmds1">DATA Step</label>
> 
>       <action id="cas.tkds1.execPgm" name="execPgm" entry="execpgm">
> 
>          <label id="cas.tkds1.execPgm.__label" key="TKDS1_LABEL_EXECPGM"
> dvd="cas" msgfile="tkmds1">Execute DATA Step</label>
> 
>  
> 
>  
> 
> Thanks for the help,
> 
>   Craig
> 
>  
> 
> BTW I follow this list in the daily digest so I wonbt see any responses
> till tomorrow unless you copy me in your response to the list.
> 
> My email is: craig.sampson@xxxxxxx <mailto:craig.sampson@xxxxxxx> 
> 
>  
> 
>  
> 
> XSL-List info and archive <http://www.mulberrytech.com/xsl/xsl-list>
> EasyUnsubscribe <-list/225679>
> (by email <>)

-- 
Gerrit Imsieke
GeschC$ftsfC<hrer / Managing Director
le-tex publishing services GmbH
Weissenfelser Str. 84, 04229 Leipzig, Germany
Phone +49 341 355356 110, Fax +49 341 355356 510
gerrit.imsieke@xxxxxxxxx, http://www.le-tex.de

Registergericht / Commercial Register: Amtsgericht Leipzig
Registernummer / Registration Number: HRB 24930

GeschC$ftsfC<hrer: Gerrit Imsieke, Svea Jelonek,
Thomas Schmidt, Dr. Reinhard VC6ckler

Current Thread