[xsl] Filtering duplicated data problem

Subject: [xsl] Filtering duplicated data problem
From: Fanyin Wang <fanyinxslt@xxxxxxxxx>
Date: Wed, 3 Nov 2004 10:24:42 -0800 (PST)
Hi,

Here's my xml and xsl

<?xml version="1.0" encoding="UTF-8"?>
<sections id="001" title="Title">
	<section>
		<item id="9191" title="JN0009">
			<itemmetadata>
				<qtimetadata>
					<qtimetadatafield>
						<fieldlabel>item_type_code</fieldlabel>
						<fieldentry>PA</fieldentry>
					</qtimetadatafield>
					<qtimetadatafield>
						<fieldlabel>item_type_description</fieldlabel>
						<fieldentry>PAA</fieldentry>
					</qtimetadatafield>
				</qtimetadata>
			</itemmetadata>
		</item>
		<item id="3280547">
			<itemmetadata>
				<qtimetadata>
					<qtimetadatafield>
						<fieldlabel>item_type_code</fieldlabel>
						<fieldentry>OE</fieldentry>
					</qtimetadatafield>
					<qtimetadatafield>
						<fieldlabel>item_type_desc</fieldlabel>
						<fieldentry>OEE</fieldentry>
					</qtimetadatafield>
				</qtimetadata>
			</itemmetadata>
		</item>
	</section>
	<section>
		<item id="11114" title="JNST0322">
			<itemmetadata>
				<qtimetadata>
					<qtimetadatafield>
						<fieldlabel>item_type_code</fieldlabel>
						<fieldentry>PA</fieldentry>
					</qtimetadatafield>
					<qtimetadatafield>
						<fieldlabel>item_type_description</fieldlabel>
						<fieldentry>PAA</fieldentry>
					</qtimetadatafield>
				</qtimetadata>
			</itemmetadata>
		</item>
		<item id="3331945">
			<itemmetadata>
				<qtimetadata>
					<qtimetadatafield>
						<fieldlabel>item_type_code</fieldlabel>
						<fieldentry>MC</fieldentry>
					</qtimetadatafield>
					<qtimetadatafield>
						<fieldlabel>item_type_description</fieldlabel>
						<fieldentry>MMC</fieldentry>
					</qtimetadatafield>
				</qtimetadata>
			</itemmetadata>
		</item>
	</section>
	<section>
		<item id="11114" title="JNST0322">
			<itemmetadata>
				<qtimetadata>
					<qtimetadatafield>
						<fieldlabel>item_type_code</fieldlabel>
						<fieldentry>PA</fieldentry>
					</qtimetadatafield>
					<qtimetadatafield>
						<fieldlabel>item_type_description</fieldlabel>
						<fieldentry>PAA</fieldentry>
					</qtimetadatafield>
				</qtimetadata>
			</itemmetadata>
		</item>
		<item id="11291" title=".JN0321">
			<itemmetadata>
				<qtimetadata>
					<qtimetadatafield>
						<fieldlabel>item_type_code</fieldlabel>
						<fieldentry>PA</fieldentry>
					</qtimetadatafield>
					<qtimetadatafield>
						<fieldlabel>item_type_desc</fieldlabel>
						<fieldentry>PAA</fieldentry>
					</qtimetadatafield>
				</qtimetadata>
			</itemmetadata>
		</item>
		<item id="9191" title="JN0009">
			<itemmetadata>
				<qtimetadata>
					<qtimetadatafield>
						<fieldlabel>item_type_code</fieldlabel>
						<fieldentry>PA</fieldentry>
					</qtimetadatafield>
					<qtimetadatafield>
						<fieldlabel>item_type_description</fieldlabel>
						<fieldentry>PAA</fieldentry>
					</qtimetadatafield>
				</qtimetadata>
			</itemmetadata>
		</item>
		<item id="3280585">
			<itemmetadata>
				<qtimetadata>
					<qtimetadatafield>
						<fieldlabel>passage_id_ref</fieldlabel>
						<fieldentry>11291</fieldentry>
					</qtimetadatafield>
					<qtimetadatafield>
						<fieldlabel>item_type_code</fieldlabel>
						<fieldentry>OE</fieldentry>
					</qtimetadatafield>
					<qtimetadatafield>
						<fieldlabel>item_type_desc</fieldlabel>
						<fieldentry>OEE</fieldentry>
					</qtimetadatafield>
				</qtimetadata>
			</itemmetadata>
		</item>
	</section>
</sections>

-----------------------------------------------------------------------------------------

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0"
  xmlns:xsl="http://www.w3.org/1999/XSL/Transform";
  xml:space="default">
 <xsl:template match="/">
  <xsl:apply-templates select="//item"
mode="passage"/>
 </xsl:template>
 
 <xsl:template match="item" mode="passage">
<xsl:if
test="descendant::qtimetadatafield/fieldentry[preceding-sibling::node()[text()='item_type_code']]/text()='OE'">

1. Found OE item

<xsl:for-each select="preceding-sibling::item[@title
!='']">
2. Found a Passage item that relate to OE item.
<xsl:variable name="pass_id" select="@id"/>
  
 <xsl:if test="not(preceding-sibling::item/@id =
$pass_id)">
3. Print  pa_id= <xsl:value-of select="@id"/><br></br>
  
  </xsl:if>
  
</xsl:for-each>

</xsl:if>   

</xsl:template>
  
</xsl:stylesheet>

The way I tried on my xsl not work correctly, I'm
asking for help on grouping solution ( I can't get it
work). thank you in advance!

I want the first level group to group the <section>
element base on the value of the fieldentry for the
item_type_desc in the item that has a item_type_code
of OE. (this allow me to have two <section> with all
it's items including item that has a item_type_code of
OE) . Then base on first level group to group <item>
element base on the unique value of it's @id ( this
allow me to get rid of the duplicate item that has a
item_type_code of PA)

The output that I want is able to get unique item of
@id that is relate to the item has a item_type_code of
OE. 

In my xml source, I have 3 <section> elements, after
first level group, I should have 2 <section> elements
that contain all <item> elements (has duplicated item
in both <section> for example item @id=9191). after
second group it should let me to get following (get
rid of duplicated item @id 9191)

item @id of 9191
item @id of 11114
item @id of 11291

Thank you very much for the help
Fanyin


		
__________________________________ 
Do you Yahoo!? 
Check out the new Yahoo! Front Page. 
www.yahoo.com 

Current Thread