xsl-list
[Top] [All Lists]

[xsl] Use of copy-of(.)

2016-08-17 22:46:04
Dear all,
Is it a fair assumption that we should not use xxxx/copy-of(.) in the
select of a variable when we know that the node set xxxx i am selecting is
going to be huge ? Mainly because it defeats the purpose of variables ? Or
does it not matter ?
Dak

On Aug 15, 2016 12:58 PM, wrote:

Thanks Martin and Michael.
My conditions can be quite randomly picking nodes from trees .. so i am
going to try using the parse multiple times to populate these variables
technique...
Thanks again. A lot of learning again for me..

On Aug 15, 2016 12:46 PM, "Michael Kay mike(_at_)saxonica(_dot_)com" <
xsl-list-service(_at_)lists(_dot_)mulberrytech(_dot_)com> wrote:


On 15 Aug 2016, at 16:46, Mailing Lists Mail daktapaal(_at_)gmail(_dot_)com <
xsl-list-service(_at_)lists(_dot_)mulberrytech(_dot_)com> wrote:

Dear All..
I have some.more questions

1. How do we get the global Xpaths.. That can be used else where.


Basically, you can't. The code you provide isn't streamable.

There may be workarounds. For example, you could process the input stream
twice, once to extract the "lookup" information, and once to process the
data that references it. Then you might write:

<xsl:variable name="WaterSpeciesDisplayIndicator" as="xs:boolean">
  <xsl:stream href="UniverseKingdom.xml">
    
<xsl:select="/*:UniverseKingdom/*:DisplayIndicators/*:WaterSpeciesDisplayIndicator
= 'true'"/>
  </xsl:stream>
</xsl:variable>

Note that (in Saxon at any rate) this will stop processing the input
stream as soon as a qualifying element is found, so it may not be as
expensive as processing the whole document twice.

If the lookup data is at the start of the file, and always appears before
you need it, then another approach is to use accumulators. These read data
"in the background" as the input stream is being read:

<xsl:accumulator name="indicator" as="xs:boolean" initial-value="false()">
  <xsl:accumulator-rule match="/*:UniverseKingdom/*:Di
splayIndicators/*:WaterSpeciesDisplayIndicator/text()[. = 'true']"
     select="true()"/>
</xsl:accumulator>

which you can then reference as <xsl:if test="accumulator-before('indi
cator')">....

Michael Kay
Saxonica


select="/*:UniverseKingdom/*:DisplayIndicators/*:WaterSpeciesDisplayIndicator
= 'true'"/>

  example: I want to know somewhere in some template the value of some
other element : for example  In Amphibian template definition, I want to
know if  WaterSpeciesDisplayIndicator is set to true :

 Code:

  <xsl:transform version="3.0" xmlns:xsl="http://www.w3.org/1
999/XSL/Transform" xmlns:saxon="http://saxon.sf.net/"; xmlns:multiclass="
http://www.csp.com/Securitization/csp-multiclass"; xmlns:mismo="
http://www.mismo.org/residential/2009/schemas";>

            <xsl:mode name="stream" streamable="yes"
on-no-match="shallow-copy"/>

            <xsl:output method="xml" indent="yes"/>

           <xsl:variable name="WaterSpeciesDisplayIndicator"
select="/*:UniverseKingdom/*:DisplayIndicators/*:WaterSpeciesDisplayIndicator
= 'true'"/>


            <xsl:template match="/">

   <xsl:stream href="UniverseKingdom.xml">

         <xsl:apply-templates mode="stream"/>
                        </xsl:stream>
            </xsl:template>



            <xsl:template match="*:Amphibian">

 <xsl:if test = "$WaterSpeciesDisplayIndicator"> <xsl:copy-of select =
"."/>
</xsl:if>

            </xsl:template>

            I know that GLobal parameters will not work because the
variables probably doesnt know the XML we are streaming at the time of
declaration. I also know that from the template match for Amphibian, I can
not get to the xpath of /*:UniverseKingdom/*:DisplayIn
dicators/*:WaterSpeciesDisplayIndicator.

           I am not sure how else I should be getting the
WaterSpeciesDisplayIndicator Value

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


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


--~----------------------------------------------------------------
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>
  • [xsl] Use of copy-of(.), Mailing Lists Mail daktapaal(_at_)gmail(_dot_)com <=