[XSL-LIST Mailing List Archive Home] [By Thread] [By Date] [Recent Entries] [Reply To This Message]

Select on Text Node, XML Out of Ancestors

Subject: Select on Text Node, XML Out of Ancestors
From: John Robert Gardner <jrgardn@xxxxxxxxx>
Date: Mon, 1 Nov 1999 09:36:32 -0500 (EST)
record textnode
I've looked over the replies to Clark Evans' question of 10/19 selecting
the SiO2 text (subject line XSL: Returning a selected node in the context
of it's ancestors), and I'm looking to do omething similar, but not quite
so detailed viz. attributes, so I'm having trouble adapting the solution.

For my XML:
<root>
....lots like teh following...

<record>
	.... lots of these daa-field elements ....

	<data-field type="773" indicator="0">
		<subfield code="a">Soemthing Here</subfield>
		<subfield code="g">Number 2, 14, (something) blah
			</subfield>
		<subfield code="x">0039-310X</subfield>
	</data-field>
<record>
......lots more ......
</root>

I'm looking to select (ultimately extract) all the records with subfield
0039-310X, I've diligently read through all of the W3C spec in detail, and
I can piece together bits from reading everyone's suggestions, but some of
it just baffles me, and all I want it to do is go find 0039-310X and then
simply walk back up (per Ken Holman, but I got lost in his code
eventually) to the ancestor <record>, grab all contents, and append to the
output file.  There are no id attributes, but there are other attributes
and elements within each selected record, all of which, of course, I want
to put into the output unchnaged.

I liked david Carlisle's solution (b/c it was short and I could almost
grasp it), and I've adopted it as follows:

<?xml version="1.0"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
                 version="1.0">
<xsl:output method="xml"/>
<xsl:variable name="x" 
              select="generate-id(//subfield[.='0039-310X'])"/>
<xsl:template match="*">
<xsl:if test="descendant-or-self::*[generate-id(.)=$x]">
<xsl:copy>
<xsl:copy-of select="@*"/>
<xsl:apply-templates/>
</xsl:copy>
</xsl:if>
</xsl:template>
</xsl:stylesheet>

Unfortunately, I only got back a fragment of the record after running it
through xt:

<root>
	<record type="naa">
		<data-field tag="773" ind1="0">						
			<subfield code="x">0039-310X</subfield>
		</data-field>	
	</record>
</root>

Did I miss something with David's note:

bash-2.01$ xt ansc.xml ansc2.xsl 
<vendor name="james">
 <product id="1234">
  <material>SiO2</material>
 </product>
 
</vendor>

I'm not sure I know what "bash" is.

I'm very sure that in spite of my careful reading I'm missing something
obvious which will ensure complete transmission of _ALL_ the record in
which subfield 0039-310X is found, not just the fragment above.

Thanks for any help in advance, folks- 

jr




=-=-=-=-=-=-=-=-=-==-=-=-=
John Robert Gardner
XML Engineer
ATLA-CERTR
------------------------------------------------------------
http://vedavid.org/
http://www.purl.org/CERTR/



 XSL-List info and archive:  http://www.mulberrytech.com/xsl/xsl-list


Current Thread

PURCHASE STYLUS STUDIO ONLINE TODAY!

Purchasing Stylus Studio from our online shop is Easy, Secure and Value Priced!

Buy Stylus Studio Now

Download The World's Best XML IDE!

Accelerate XML development with our award-winning XML IDE - Download a free trial today!

Don't miss another message! Subscribe to this list today.
Email
First Name
Last Name
Company
Subscribe in XML format
RSS 2.0
Atom 0.3
Site Map | Privacy Policy | Terms of Use | Trademarks
Free Stylus Studio XML Training:
W3C Member
Stylus Studio® and DataDirect XQuery ™are products from DataDirect Technologies, is a registered trademark of Progress Software Corporation, in the U.S. and other countries. © 2004-2013 All Rights Reserved.