Subject: RE: [xsl] How do can I select distinct nodes and adding a counter at the sa me time From: Cams Ismael <Ismael.Cams@xxxxxxxxxxxxxxx> Date: Wed, 27 Nov 2002 16:17:37 +0100 |
Hello, I have been already helped a lot by this solution. However again I encountered a problem for which I don't see a solution immediately. What I need now is a mechanism to determine if the xxx value or att1 attribute is already in the first xml file. When already available this node should not be count. So what I want to do is the next: first file: <root> <mapping oid=".1.5.3.2" id="1"/> <mapping oid=".1.5.3.4.5" id="3"/> </root> second file: <xx> <xxx>.1.5.6.3.8 <xxxx att1=".1.5.6.3.8"/> <xxx> <xxx>.1.5.6.3.10 <xxxx att2="1.5.3.4.5"/> <xxx> <xxx>.1.5.6.4.5</xxx> </xx> result file should be: <root> <mapping oid=".1.5.3.2" id="1"/> <mapping oid=".1.5.3.4.5" id="3"/> <mapping oid=".1.5.3.4.8" id="5"/> <mapping oid=".1.5.6.4.5" id="7"/> </root> The solution I have now gives the following result: <root> <mapping oid=".1.5.3.2" id="1"/> <mapping oid=".1.5.3.4.5" id="3"/> <mapping oid=".1.5.3.4.8" id="5"/> <mapping oid=".1.5.6.4.5" id="9"/> <!--This id should be 7--> </root> The stylesheet I use select all distinct values with use of the Muench method. Than I check if the value was already available in the first file. What I actually need is a selection of all distinct nodes that don't already exist in the first file. If all this information was in one file I think I could handle it, but no two files are used and I don't see directly a solution for this. Hopefully someone can help me with this again ? Thanks in advance. Kind regards, Ismaël -----Original Message----- From: TSchutzerWeissmann@xxxxxxxxxxxxxxxx [mailto:TSchutzerWeissmann@xxxxxxxxxxxxxxxx] Sent: vrijdag 22 november 2002 16:59 To: xsl-list@xxxxxxxxxxxxxxxxxxxxxx Subject: RE: [xsl] How do can I select distinct nodes and adding a counter at the sa me time Dear Ismaël >I know what you mean, but the problem I have is how do I produce a tree with >distinct values that I can access afterwards. This is essentially a grouping problem. You can use xsl:key to group elements according to a particular value. This will allow you to access the distinct values as a nodeset, without having to put them in a variable and use an extension function. [from your first email] > The second one looks like this: > > <xx> > <xxx>.1.5.6.3.8 > <xxxx att1=".1.5.6.3.8"/> > <xxx> > <xxx>.1.5.6.3.10 > <xxxx att2="1.5.6.3.9"/> > <xxx> > <xxx>.1.5.6.4.5</xxx> > </xx> [...] > What I want to do know is getting out of the second xml file the > values of the attributes mapped onto an odd number (5,7,9) when this > attribute is available. When not available the text value of the tag must be > used. The only hard bit is setting up the key so that it ignores the text value of the xxx tag if there's an xxxx child with an attribute. <xsl:key name="distinctlyXXX" match="xxx" use="self::xxx[not(xxxx/@*)]|xxxx/@*"/> <!-- group on the xxxx child's first attribute, if it exists, otherwise on the text value of xxx --> <xsl:variable name="first_path" select="firstFile.xml"/> <xsl:variable name="first" select="document($first_path)"/> <xsl:variable name="first_count_maps" select="count($first/mapping/map)"/> <xsl:template match="xx"> <mapping> <xsl:copy-of select="$first/mapping/map"/> <xsl:apply-templates select="xxx[generate-id() = generate-id(key('distinctlyXXX', self::xxx[not(xxxx/@*)]|xxxx/@*))]"/> <!-- this is classic Muenchian grouping --> </mapping> </xsl:template> <xsl:template match="xxx"> <map oid="{string(self::xxx[not(xxxx/@*)] | xxxx/@*)}" id="{(position() + $first_map_count) * 2 - 1}"> <xsl:value-of select=". | xxxx/@*"/> </map> </xsl:template> XSL-List info and archive: http://www.mulberrytech.com/xsl/xsl-list XSL-List info and archive: http://www.mulberrytech.com/xsl/xsl-list
Current Thread |
---|
|
<- Previous | Index | Next -> |
---|---|---|
RE: [xsl] How do can I select disti, TSchutzerWeissmann | Thread | RE: [xsl] How do can I select disti, TSchutzerWeissmann |
[xsl] CSS for XSL:FO?, Lee, Insoo | Date | RE: [xsl] CSS for XSL:FO?, Andy Joslin |
Month |