xsl-list
[Top] [All Lists]

Re: [xsl] Question about isolating records

2015-09-05 16:48:29
At 2015-09-05 21:35 +0000, Mark Wilson pubs(_at_)knihtisk(_dot_)org wrote:
Ken,
I clearly am missing something.
My stylesheet (using the two records at the
bottom of this email) creates an empty @pdf-number.

<xsl:key name="pdf-key" match="Shelfmark"
use="doc('test-xml.xml')/List/Item"/>

That is backwards ... you want to populate the
table with <Item> elements and you want the
associated value for the table entry to be the <Shelfmark> value:

<xsl:key name="pdf-key" match="Item" use="Shelfmark"/>

... then you look up in the table for the desired value for Shelfmark.

        <xsl:template match="@* | node()">
        <xsl:copy copy-namespaces="no">
            <xsl:apply-templates select="@* | node()"/>
        </xsl:copy>
    </xsl:template>

    <xsl:template match="Tag">
        <xsl:choose>
            <xsl:when test=". eq '852'">
                <Tag>
                    <xsl:attribute
name="crawford-number" select="@crawford-number"/>
                    <xsl:attribute
name="pdf-number" select="key('pdf-key', PDF, @crawford-number)"/>

And that is incorrect as well, because the value
you are looking up is the second argument, the
tree is in the third argument (and it seems
strange that you are picking only the one '852'
value, so I'm generalizing here, but you can
change it to be hard-coded if you need):

 <!--untested but I think it should work just fine-->
 <xsl:template match="Tag">
   <!--preserve the element-->
   <xsl:copy>
     <!--preserve all attributes-->
     <xsl:copy-of select="@*"/>
     <!--add an attribute only if there is a Crawford number-->
     <xsl:for-each select="@crawford-number">
       <!--get the value by looking up in the other document-->
       <xsl:attribute name="pdf-number"
                      select="key('pdf-key',.,doc('FILE2.xml')"/>
     </xsl:for-each>
   </xsl:copy>
 </xsl:template>

I hope this helps.

. . . . . .  Ken

p.s. review pages 319-323 of my XSLT book that you have

FILE 1:
<List>
    <Record>
        <Field>
            <Tag>245</Tag>
            <Data>General-Anzeiger für
Philatelie.$bInternationales Insertions- Organ.</Data>
        </Field>
        <Field>
            <Tag crawford-number="Crawford 2411.">852</Tag>
            <Data>No.1-800. 10 Apr. 1883-15
Jan. 1913$aBritish Library$b5$cDPB$jCrawford
                2411.$nxxk</Data>
        </Field>
    </Record>
</List>

File 2:
<List>
     <Item>
        <PDF>016678286</PDF>
        <Shelfmark>Crawford 2411.</Shelfmark>
        <Title>General-Anzeiger für Philatelie.</Title>
    </Item>
</List>


--
Check our site for free XML, XSLT, XSL-FO and UBL developer resources |
Free 5-hour lecture:  http://www.CraneSoftwrights.com/links/video.htm |
Crane Softwrights Ltd.             http://www.CraneSoftwrights.com/s/ |
G. Ken Holman                    
mailto:gkholman(_at_)CraneSoftwrights(_dot_)com |
Google+ profile:       http://plus.google.com/+GKenHolman-Crane/about |
Legal business disclaimers:     http://www.CraneSoftwrights.com/legal |


---
This email has been checked for viruses by Avast antivirus software.
https://www.avast.com/antivirus
--~----------------------------------------------------------------
XSL-List info and archive: http://www.mulberrytech.com/xsl/xsl-list
EasyUnsubscribe: http://lists.mulberrytech.com/unsub/xsl-list/1167547
or by email: xsl-list-unsub(_at_)lists(_dot_)mulberrytech(_dot_)com
--~--

<Prev in Thread] Current Thread [Next in Thread>