![](http://content.invisioncic.com/r49260/set_resources_1/84c1e40ea0e759e3f1505eb1788ddf3c_pattern.png)
mysacramento
-
Posts
3 -
Joined
-
Last visited
Content Type
Profiles
Forums
Events
Posts posted by mysacramento
-
-
Thank you very much for your response. The proposed code is actually a better interpretation of my current code, probably more efficient too. However I still have the original problem:Let me show you a practical example of what I'm trying to accomplish by listing an input XML and the aspected result:Input XML (original):I didn't quite catch the deal here, but they again, I might not need to. How about something like:<xsl:template name="details"><details><xsl:apply-templates select="detail"><xsl:sort select="A/@app"/><xsl:sort select="A/@id"/><xsl:sort select="A/@part"/><xsl:sort select="A/@factor"/><xsl:sort select="A/@inc"/></xsl:apply-templates></details></xsl:template><xsl:template match="detail"><!--The stuff you needed to use position() for. You can use it here.--><xsl:call-template name="detail"/></xsl:template>>
Note: It might be even better if the template called "detail" is actually in the matched "detail" template.
<detailsection> <detail> <item name="tagged">false</item> <A app="x" id="00401" part="1" factor="0" inc="Some text"> <B> <item name="value">1</item> </B> </A> </detail> <detail> <item name="tagged">false</item> <A app="x" id="99991" part="0" factor="0" inc="Some text"> <B> <item name="value">900</item> </B> </A> </detail> <detail> <item name="tagged">false</item> <A app="x" id="00401" part="1" factor="0" inc="Some text"> <B> <item name="value">100</item> </B> </A> </detail></detailsection>
Output XML (after transformation):
<detailsection> <detail> <item name="tagged">false</item> <A app="x" id="00401" part="1" factor="0" inc="Some text"> <B> <item name="value">101</item> </B> </A> </detail> <detail> <item name="tagged">false</item> <A app="x" id="99991" part="0" factor="0" inc="Some text"> <B> <item name="value">900</item> </B> </A> </detail></detailsection>
The output result should combine the 1st and 3rd node together since they are the same. By "combine" I mean keeping the <datail> node the same except for the <item name="value"> that will report the total of the 2 nodes combined together (1 + 100). If later I find some more node that match node #1 (or #2 for that matter) I would like to update the existing <item name="value"> value. Any idea about how to approch this problem during the XML transformation process (XSLT or other techniques)?Thank you very much for your advices.
-
Hello,I want to ask you guys a solution in XSLT about how to consolidate several same XML nodes into one. For instance:<xsl:template name="details"><details><xsl:for-each select="detail"><xsl:sort select="A/@app"/><xsl:sort select="A/@id"/><xsl:sort select="A/@part"/><xsl:sort select="A/@factor"/><xsl:sort select="A/@inc"/><xsl:call-template name = "copydetail"/></xsl:for-each></details></xsl:template>Instead <xsl:call-template name = "copydetail"/> which copy the current node into the <detail> node I would like to update the same node if already exist in the <detail>. Is it possible?Unfortunately I can't use the position() function because of the sorting, how can I keep track of the last processed node? I guess my logic will say if processed node = current node then update processed node, otherwise write (output) the processed node because I won't find any more of this nodes in my file (because of the sorting). Using key() instead the sort works too but I have the same problem, how can I group all of the nodes in my key into one single node? Maybe with 2 steps transformation process?Hope I could explained the problem clear enough.Thanks.
NaN
in XSLT/XSL-FO
Posted
To verify if a value is numeric (whole or fractional number) is better to use:string(number(@value)) != 'NaN'ornormalize-space(@value) != 'NaN'and why?Thanks.