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

Re: Replacing the element's attribute in sequential or

Subject: Re: Replacing the element's attribute in sequential order
From: "Marc marc.liste@xxxxxxx" <xsl-list-service@xxxxxxxxxxxxxxxxxxxxxx>
Date: Fri, 1 Aug 2014 13:13:11 -0000
Re:  Replacing the element's attribute in sequential or
The best way is to merge all your xslt into one, and after that using an xslt.
Marc
Le 01/08/2014 15:07, varun bhatnagar varun292006@xxxxxxxxx a C)crit :
Thanks for such a quick reply. Really appreciate your help. But the
syntax which you are suggesting is of XSLT-2.0 but I am using XSLT-1.0
so for me "collection" and "for" statement says - "Invalid XPath".
Can you suggest something which goes with XSLT-1.0. I am doing all these
things in Eclipse Editor with the help of plugin provided for xml.

Thanks,
BR,
Varun


On Fri, Aug 1, 2014 at 12:31 PM, Marc marc.liste@xxxxxxx <mailto:marc.liste@xxxxxxx> <xsl-list-service@xxxxxxxxxxxxxxxxxxxxxx <mailto:xsl-list-service@xxxxxxxxxxxxxxxxxxxxxx>> wrote:

    If you have all the files loaded, perhaps can you use the <xsl:number>
    Marc

    Le 01/08/2014 11:33, Ihe Onwuka ihe.onwuka@xxxxxxxxx
    <mailto:ihe.onwuka@xxxxxxxxx> a C)crit :

        http://www.dpawson.co.uk/xsl/__sect2/N1553.html#d2256e169
        <http://www.dpawson.co.uk/xsl/sect2/N1553.html#d2256e169>


On Fri, Aug 1, 2014 at 10:29 AM, varun bhatnagar varun292006@xxxxxxxxx <mailto:varun292006@xxxxxxxxx> <mailto:varun292006@xxxxxxxxx <mailto:varun292006@xxxxxxxxx>> <xsl-list-service@xxxxxxxxxxxxxxxxxxxxxxxx <mailto:xsl-list-service@xxxxxxxxxxxxxxxxxxxxxx>

        <mailto:xsl-list-service@xxxxxxxxxxxxxxxxxxxxxxxx
        <mailto:xsl-list-service@xxxxxxxxxxxxxxxxxxxxxx>>> wrote:

Hi,

             Thanks a ton for the reply.
             I am using XSLT-1.0 so I don't think for loop will work. I am
             loading the file using python code, lxml library does that
        for me. I
             pass my files one by one to the method given below and
        merge the files.

               def startXSLTMerge(self, mergeFileName, inputFile):
                      parser = etree.XMLParser()
                      parser.resolvers.add(__FileResolver())

                      xml_input = etree.parse(open(inputFile,'r'__), parser)
                      xslt_root =
        etree.parse(open(mergeGeneric.__xsl','r'), parser)
                      transform = etree.XSLT(xslt_root)
                      result = str(transform(xml_input))
                      print str(transform(xml_input))
                      f = open('Merged_File.xml', 'w+')
                      f.write(str(result))
                      f.close()

             I was trying something like this (this is not giving me the
        correct
             result, but something which I have tried):

             <xsl:template match="/InfoTag/Procedure">
             <xsl:variable name="countDocProcedures">
             <xsl:value-of select="count(/InfoTag/__Procedure)"/>
             </xsl:variable>
             <xsl:variable name="countProcedures">
             <xsl:value-of

        select="count(document('__NewFile1.xml')/InfoTag/__Procedure)"/>
             </xsl:variable>

             <xsl:variable name="totalProcedures">
             <xsl:value-of select="$countDocProcedures + $countProcedures"/>
             </xsl:variable>
             <xsl:call-template name="callProcedure">
             <xsl:with-param name="test" select="$totalProcedures"/>
             </xsl:call-template>
             </xsl:template>
             <xsl:template name="callProcedure">
             <xsl:param name="test"/>
             <xsl:if test="$test &gt; 0">
             <xsl:copy>
             <xsl:if test="/InfoTag/Procedure/__downTime">
             <xsl:attribute name="attrProc">
             <xsl:value-of select="$test"></xsl:value-of>
             </xsl:attribute>
             <xsl:attribute name="attrLevel">
             <xsl:value-of select="'##### NOT UNIQUE#####'"></xsl:value-of>
             </xsl:attribute>
             <xsl:copy-of select="downTime"></xsl:copy-__of>
             </xsl:if>
             </xsl:copy>
             <xsl:call-template name="callProcedure">
                      <xsl:with-param name="test" select="$test - 1"/>
                    </xsl:call-template>
             </xsl:if>
             </xsl:template>

             It is getting '10' in test parameter which I have passed. Still
             trying to find out why.
             Could you help me.


Thanks, BR, Varun


On Fri, Aug 1, 2014 at 11:19 AM, Martin Honnen martin.honnen@xxxxxx <mailto:martin.honnen@xxxxxx> <mailto:martin.honnen@xxxxxx <mailto:martin.honnen@xxxxxx>> <xsl-list-service@xxxxxxxxxxxxxxxxxxxxxxxx <mailto:xsl-list-service@xxxxxxxxxxxxxxxxxxxxxx>

             <mailto:xsl-list-service@xxxxxxxxxxxxxxxxxxxxxxxx
        <mailto:xsl-list-service@xxxxxxxxxxxxxxxxxxxxxx>>> wrote:

                 varun bhatnagar varun292006@xxxxxxxxx
        <mailto:varun292006@xxxxxxxxx>
                 <mailto:varun292006@xxxxxxxxx
        <mailto:varun292006@xxxxxxxxx>> wrote:

Hi,

                     I have few xml files (depends on user how much
        he/she wants
                     to pass). I
                     have to take those files and merge them, so I have
        created a
                     loop and in
                     that I am passing these files one by one. For this
        I have
                     written few
                     rules to merge. But there is this <Procedure> tag
        where I am
                     stuck. To
                     merge this I need to parse each Procedure and have
        to modify its
                     attributes (attrProc and attrLevel). I have to
        replace the
                     attrProc
                     attribute with a sequential value and for me this
        will set a
                     unique
                     "Level" for each Procedure tag and later I will
        process them
                     based on
                     their level.


_File1.xml_


                     *<?xml version="1.0" encoding="UTF-8"?>*
                     *<InfoTag>*
                     *<Procedure attrProc="TestProcA" attrLevel="1">*
                     *      <downTime>*
                     *        <acceptableDownTime>*
                     *          <all/>*
                     *        </acceptableDownTime>*
                     *        <downTimePeriod time="600000000"/>*
                     *      </downTime>*
                     *    </Procedure>*
                     **
                     * <Procedure attrProc="TestProcB" attrLevel="2">*
                     *      <downTime>*
                     *        <acceptableDownTime>*
                     *          <all/>*
                     *        </acceptableDownTime>*
                     *        <downTimePeriod time="600000000"/>*
                     *      </downTime>*
                     *    </Procedure>*
                     *</InfoTag>*


_File2.xml_ _ _ *<?xml version="1.0" encoding="UTF-8"?>* *<InfoTag>* *<Procedure attrProc="TestProcC" attrLevel="3">* * <downTime>* * <acceptableDownTime>* * <all/>* * </acceptableDownTime>* * <downTimePeriod time="600000000"/>* * </downTime>* * </Procedure>* ** * <Procedure attrProc="TestProcD" attrLevel="4">* * <downTime>* * <acceptableDownTime>* * <all/>* * </acceptableDownTime>* * <downTimePeriod time="600000000"/>* * </downTime>* * </Procedure>* *</InfoTag>*



                     I am trying to fetch an output file which looks
        like this:

_Output.xml_

                     *<InfoTag>*
                     *<Procedure attrProc="1" attrLevel="### NOT UNIQUE
        ###">*
                     *      <downTime>*
                     *        <acceptableDownTime>*
                     *          <all/>*
                     *        </acceptableDownTime>*
                     *        <downTimePeriod time="600000000"/>*
                     *      </downTime>*
                     *    </Procedure>*
                     * <Procedure attrProc="2" attrLevel="### NOT UNIQUE
        ###">*
                     *      <downTime>*
                     *        <acceptableDownTime>*
                     *          <all/>*
                     *        </acceptableDownTime>*
                     *        <downTimePeriod time="600000000"/>*
                     *      </downTime>*
                     *    </Procedure>*
                     *<Procedure attrProc="3" attrLevel="### NOT UNIQUE
        ###">*
                     *      <downTime>*
                     *        <acceptableDownTime>*
                     *          <all/>*
                     *        </acceptableDownTime>*
                     *        <downTimePeriod time="600000000"/>*
                     *      </downTime>*
                     *    </Procedure>*
                     * <Procedure attrProc="4" attrLevel="### NOT UNIQUE
        ###">*
                     *      <downTime>*
                     *        <acceptableDownTime>*
                     *          <all/>*
                     *        </acceptableDownTime>*
                     *        <downTimePeriod time="600000000"/>*
                     *      </downTime>*
                     *    </Procedure> *
                     *</InfoTag>*



                     I am thinking of looping it and will count the
        occurrences
                     of it and
                     then I am thinking to replace the value. But I am
        not able
                     to do that.
                     Can anyone tell me how to achieve this. How can I
        loop every
                     Procedure
                     tag and and append the attrProc attribute value in a
                     sequential order?


How do you load the files?


I would simply use Saxon 9 and collection, as in

                 <xsl:template match="/" name="main">
                    <InfoTag>
                      <xsl:apply-templates
                 select="collection('.?select=*____.xml')//Procedure"/>

                    </InfoTag>
                 </xsl:template>

                 <xsl:template match="Procedure">
                    <Procedure attrProc="{position()}" attrLevel="###
        NOT UNIQUE
                 ###">
                      <xsl:apply-templates/>
                    </Procedure>
                 </xsl:template>

                 maybe with an additional <xsl:sort
        select="@attrLevel"/> on the
                 apply-templates of the collection, depending on which
        ordering
                 you need. If the name of the files are known then you
        can of
                 course also do

                 <xsl:template match="/" name="main">
                    <InfoTag>
                      <xsl:apply-templates select="for $file in
                 (doc('file1.xml'), doc('file2.xml')) return
        $file//Procedure"/>
                    </InfoTag>
                 </xsl:template>

                 <xsl:template match="Procedure">
                    <Procedure attrProc="{position()}" attrLevel="###
        NOT UNIQUE
                 ###">
                      <xsl:apply-templates/>
                    </Procedure>
                 </xsl:template>


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


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



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

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.