|
[XSL-LIST Mailing List Archive Home] [By Thread] [By Date] [Recent Entries] [Reply To This Message] RE: XSL pattern needed for begin/end elements
Hi Tracy, to start, your XML (both source and target) is not well-formed... id=3D"111", etc. - did some nasty character get mixed in perhaps? We might want to guess what's your real XML is like, but we better await your answer. Cheers, <prs/> -----Original Message----- From: Tracy Atteberry [mailto:Tracy.Atteberry@xxxxxxxxxxxx] Sent: Wednesday, July 07, 2004 11:15 AM To: xsl-list@xxxxxxxxxxxxxxxxxxxxxx Subject: XSL pattern needed for begin/end elements Hi all, I'm looking for an XSL pattern to solve the problem of going from XML that has separate begin and end elements to one that does not. Please, please note that I do not control either the source or target XML formats. If I did, this would be much easier. Source XML snip: <doc> <hyperlink_begin id=3D"111" end=3D"222"> <locator_url protocol=3D"http" host_name=3D"www.sf.net"/> </hyperlink_begin> <text_run>Click</text_run> <text_run emphasis=3D"bold">here.</text_run> <hyperlink_end id=3D"222" begin=3D"111"/> </doc> Target XML example: <cod> <HyperLink xlink:href=3D"http://www.sf.net"> Click <b>here.</b> </HyperLink> </cod> In my case I can assume that associated begin and end hyperlink tags will occur as siblings -- though generally this is not the case and in fact, this is the reason the begin and end tags are unique elements. I have a template that /almost/ works so feel free to let me know why it fails OR suggest a completely different solution. Current XSL template snip: <xsl:template match=3D"//hyperlink_begin"> <xsl:variable name=3D"linkUrl"> <xsl:value-of select=3D"locator_url/@protocol"/> <xsl:text>://</xsl:text> <xsl:value-of select=3D"locator_url/@host_name"/> </xsl:variable> <xsl:variable name=3D"endID" select=3D"@end"/> <xsl:element name=3D"HyperLink"> <xsl:attribute name=3D"xlink:href"><xsl:value-of select=3D"$linkUrl"/></xsl:attribute> <xsl:apply-templates select=3D"(following-sibling::*) except (following-sibling::hyperlink_end[@id=3D$endID]/following-sibling::*)"/> </xsl:element> </xsl:template> This produces the correct hyperlink but the template for text_run elements gets called twice this way -- once inside the hyperlink, then again as templates continue to be applied. Any help would be greatly appreciated. Thanks! Tracy Atteberry PS. I'm using Saxon 8 --+------------------------------------------------------------------ XSL-List info and archive: http://www.mulberrytech.com/xsl/xsl-list To unsubscribe, go to: http://lists.mulberrytech.com/xsl-list/ or e-mail: <mailto:xsl-list-unsubscribe@xxxxxxxxxxxxxxxxxxxxxx> --+--
|
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








