Subject: Re: [xsl] Replacing the element's attribute in sequential order From: "varun bhatnagar varun292006@xxxxxxxxx" <xsl-list-service@xxxxxxxxxxxxxxxxxxxxxx> Date: Fri, 1 Aug 2014 13:06:41 -0000 |
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 < 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 a C)crit : > >> 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> <xsl-list-service@xxxxxxxxxxxxxxxxxxxxxx >> >> <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> >> <xsl-list-service@xxxxxxxxxxxxxxxxxxxxxx >> >> <mailto:xsl-list-service@xxxxxxxxxxxxxxxxxxxxxx>> wrote: >> >> varun bhatnagar 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> >> EasyUnsubscribe <-list/1005724> (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, Marc marc.liste@xxxx | Thread | Re: [xsl] Replacing the element's a, Marc marc.liste@xxxx |
[xsl] Help please: question on xml', L2L 2L emanuelallen@ | Date | Re: [xsl] Help please: question on , Wolfgang Laun wolfga |
Month |