Subject:XSLT Math operations help Author:educated idiot Date:10 Aug 2004 11:00 PM
Suppose I have an XML file that looks like this:
<A>
<VAL id="001">2</VAL>
<VAL id="233">4</VAL>
<VAL id="466">8</VAL>
</A>
<B>
<VAL id="001">2</VAL>
<VAL id="233">1</VAL>
<VAL id="466">4</VAL>
</B>
Is it possible to use XSLT to divide the first val in A by the first val
in B, and so on? The id attribute is not known at design-time, however:
- the first node is always divided by the first node in the other group, and so on
- the id attributes of these elements always match
- the id attributes in each of the two groups are unique
The desired output in this example would be:
<OUTPUT>
<OUT>1</OUT>
<OUT>4</OUT>
<OUT>2</OUT>
</OUTPUT>
Anyone have any ideas if and how this can be accomplished?
Subject:XSLT Math operations help Author:educated idiot Date:11 Aug 2004 11:12 PM
Thank you! I was not familiar with the <xml:key /> syntax. It works like
a charm.
Any suggestions on how to handle an extension to this problem? :
<root>
<A>
<VAL id="001">2</VAL>
<VAL id="233">4</VAL>
<VAL id="466">8</VAL>
</A>
<B>
<VAL id="001">2</VAL>
<VAL id="233">1</VAL>
<VAL id="466">4</VAL>
</B>
</root>
Now I would like to output the value of the first element in A divided by
the AVERAGE of the first two elements in B, and so on. Here is the desired
output:
Subject:XSLT Math operations help Author:educated idiot Date:12 Aug 2004 09:42 PM
Thank you once again.
Another extension to this problem. I was using the following-sibling notation
to retrieve the next sibling from ONE element. Now I would like to retrieve
another element with this same id from another node. I cannot seem to figure
out how to retrieve the value of the id attribute from this "next-sibling" node
so that I can pass it into a key() function (or whatever that syntax is referred to as).
A new XML file:
<root>
<A>
<VAL id="001">2</VAL>
<VAL id="233">4</VAL>
<VAL id="466">8</VAL>
</A>
<B>
<VAL id="001">2</VAL>
<VAL id="233">1</VAL>
<VAL id="466">4</VAL>
</B>
<C>
<VAL id="001">6</VAL>
<VAL id="233">7</VAL>
<VAL id="466">8</VAL>
</C>
</root>
For example, suppose I would like to divide the first element in A by the
sum of the 2nd elements in B and C. [ 2 / ( 1 + 7 ) ] I would then continue
in a loop as before -- divide the second element in A by the sum of the 3rd
elements in B and C.
I imagine this shouldn't be difficult using the building blocks you have already
shown me, but I can't seem to figure it out.
Subject:XSLT Math operations help Author:educated idiot Date:21 Aug 2004 12:14 PM
Is this not possible?
To summarize in case I wasn't clear:
Given an element, is it possible to retrieve its next sibling AND an
element in another node with the same id attribute, so that a math operation
can be performed on the two values?
If anyone has a lot of experience with XSL and thinks this is impossible,
I'd appreciate the opinion so that I can move on and look for a workaround.
This SEEMS like it should be possible, but with my lack of experience I can't
seem to figure it out.