xsl-list
[Top] [All Lists]

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

2015-04-14 15:31:14
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('…')//actionSet[…] 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('…')//actionSet"/> is
tantamount to:

<xsl:variable name="myActionSet" as="documentnode(element(actionSet))">
  <xsl:document>
    <xsl:sequence select="doc('…')//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() → actionSet and
$myActionSet/name() → (empty sequence).

So better declare myActionSet as="element(actionSet)" in first place
(it’s always good practice to use the as="…" 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(_dot_)sampson(_at_)sas(_dot_)com 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 “refActionSet” 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.

 

  I’ve 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=’abc’]"/*/>*

* *

but that caused the function to fail and not fetch the second file. I
also tried a fragment specification “#actionSet” 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.

 

 

Here’s 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 won’t see any responses
till tomorrow unless you copy me in your response to the list.

My email is: craig(_dot_)sampson(_at_)sas(_dot_)com 
<mailto:craig(_dot_)sampson(_at_)sas(_dot_)com> 

 

 

XSL-List info and archive <http://www.mulberrytech.com/xsl/xsl-list>
EasyUnsubscribe <-list/225679>
(by email <>)

-- 
Gerrit Imsieke
Geschäftsfü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(_dot_)imsieke(_at_)le-tex(_dot_)de, http://www.le-tex.de

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

Geschäftsführer: Gerrit Imsieke, Svea Jelonek,
Thomas Schmidt, Dr. Reinhard Vöckler
--~----------------------------------------------------------------
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>