[XSL-LIST Mailing List Archive Home] [By Thread] [By Date] [Recent Entries] [Reply To This Message] Re: General algorithm for finding nodes between PIs
or sometimes it's easier with xslt- style sibling recursion rather then using for-each-group Not sure I have all the cases but <x> <p><?Fm Condstart USB?>If you need this, do that.<?Fm Condend USB?>text<?Fm Condstart foo?>Some text<?Fm Condend foo?>another text</p> <p><?Fm Condstart USB?><span>If you need</span> <span>this, do that.</span><?Fm Condend USB?>text<?Fm Condstart foo?>Some text<?Fm Condend foo?><span>another text</span></p> </x> comes out as <?xml version="1.0" encoding="UTF-8"?><x> <p platform="USB">If you need this, do that.textSome textanother text</p> <p><span platform="USB">If you need</span> <span platform="USB">this, do that.</span>textSome text<span>another text</span></p> </x> using <xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> <xsl:template match="node()"> <xsl:param name="att"/> <xsl:copy> <xsl:copy-of select="$att"/> <xsl:apply-templates select="child::node()[1]"/> </xsl:copy> <xsl:apply-templates select="following-sibling::node()[1]"> <xsl:with-param name="att" select="$att"/> </xsl:apply-templates> </xsl:template> <xsl:template match="processing-instruction(Fm)"> <xsl:param name="att"/> <xsl:choose> <xsl:when test="following-sibling::node()[1]/self::text() and not(preceding-sibling::node()) and starts-with(.,'Condstart ')"> <xsl:attribute name="platform" select="substring-after(.,'Condstart ')"/> <xsl:apply-templates select="following-sibling::node()[1]"/> </xsl:when> <xsl:when test="following-sibling::node()[1]/self::* and starts-with(.,'Condstart ')"> <xsl:apply-templates select="following-sibling::node()[1]"> <xsl:with-param name="att" as="attribute()"> <xsl:attribute name="platform" select="substring-after(.,'Condstart ')"/> </xsl:with-param> </xsl:apply-templates> </xsl:when> <xsl:when test="substring-after(.,'Condend ')=$att"> <xsl:apply-templates select="following-sibling::node()[1]"/> </xsl:when> <xsl:otherwise> <xsl:apply-templates select="following-sibling::node()[1]"> <xsl:with-param name="att" select="$att"/> </xsl:apply-templates> </xsl:otherwise> </xsl:choose> </xsl:template> </xsl:stylesheet>
|
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
|