|
[XSL-LIST Mailing List Archive Home] [By Thread] [By Date] [Recent Entries] [Reply To This Message] Select on Text Node, XML Out of Ancestors
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
|
PURCHASE STYLUS STUDIO ONLINE TODAY!Purchasing Stylus Studio from our online shop is Easy, Secure and Value Priced! Download The World's Best XML IDE!Accelerate XML development with our award-winning XML IDE - Download a free trial today! Subscribe in XML format
|

Cart








