Subject: [xsl] Creating sequence/range text from position From: "Charles O'Connor coconnor@xxxxxxxxxxxx" <xsl-list-service@xxxxxxxxxxxxxxxxxxxxxx> Date: Sat, 28 Jan 2023 00:04:14 -0000 |
Hi all, We use a word processor-like XML editor that presents users with generated text for numbered bibliographic references and their in-text citations. However, downstream systems require actual text to be placed. Question is, how do we get it? (Using SaxonEE 10.x) Given <article> <p>Case 1 is <xref ref-type="bibr" rid="r2"/></p> <p>Case 2 is <xref ref-type="bibr" rid="r1 r2 r3 r5 r6 r8 r9 r10"/></p> <back> <ref-list> <ref id="r1">...</ref> <ref id="r2">...</ref> <ref id="r3">...</ref> <ref id="r4">...</ref> <ref id="r5">...</ref> <ref id="r6">...</ref> <ref id="r7">...</ref> <ref id="r8">...</ref> <ref id="r9">...</ref> <ref id="r10">...</ref> </ref-list> </back> </article> We want <article> <p>Case 1 is <xref ref-type="bibr" rid="r2">2</xref></p> <p>Case 2 is <xref ref-type="bibr" rid="r1 r2 r3 r5 r6 r8 r9 r10">1-3,5,6,8-10</xref></p> <back> <ref-list> <ref id="r1">...</ref> <ref id="r2">...</ref> <ref id="r3">...</ref> <ref id="r4">...</ref> <ref id="r5">...</ref> <ref id="r6">...</ref> <ref id="r7">...</ref> <ref id="r8">...</ref> <ref id="r9">...</ref> <ref id="r10">...</ref> </ref-list> </back> </article> (only the xrefs have changed) Case 1 is pretty easily handled with: <xsl:template match="xref[@ref-type='bibr']"> <xsl:variable name="rid" select="@rid" /> <xsl:copy> <xsl:copy-of select="@*" /> <xsl:value-of select="count(/article/back/ref-list/ref[@id=$rid]/preceding-sibling::ref) + 1" /> </xsl:copy> </xsl:template> But Case 2 is not even close. I tried adapting the solution here, to no avail: https://stackoverflow.com/questions/47559712/xslt-sequence-of-numbers-to-rang e Whatever I did, I just got the first number and none of the rest. The extra twist here is that numbers should only be expressed as a range when 3 or more occur sequentially. Thanks, Charles Charles O'Connor l Lead Product Manager Pronouns: He/Him Aries Systems Corporation l www.ariessys.com 50 High Street, Suite 21 l North Andover, MA l 01845 l USA Main: +1 (978) 975-7570 Cell: +1 (802) 585-5655
Current Thread |
---|
|
<- Previous | Index | Next -> |
---|---|---|
Re: ALMOST WORKING was Re: [xsl] XS, Martin Honnen martin | Thread | [xsl] Re: Creating sequence/range t, Lizzi, Vincent vince |
Re: New XSLT NOT WORKING was Re: [x, Eliot Kimber eliot.k | Date | [xsl] Re: Creating sequence/range t, Lizzi, Vincent vince |
Month |