Subject: Re: [xsl] 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 |
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 > 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 |
---|
|
<- Previous | Index | Next -> |
---|---|---|
Re: [xsl] Replacing the element's a, varun bhatnagar varu | Thread | Re: [xsl] Replacing the element's a, Michael Reed michael |
Re: [xsl] Help please: question on , Wolfgang Laun wolfga | Date | Re: [xsl] Help please: question on , L2L 2L emanuelallen@ |
Month |