[XSL-LIST Mailing List Archive Home] [By Thread] [By Date] [Recent Entries] [Reply To This Message] RE: Union of StepPattern
> I have a situation where I need to remove the DIVs from within an LI > element. We have decided that when we encounter a DIV within > an LI we are > going to replace it with a training BR if the next valid > sibling is another > DIV. Otherwise we'll do nothing. Can I do the following: > > <xsl:template match="DIV[parent::LI]"> That's fine, though most people write match="LI/DIV" which means the same. > <xsl:varible name="following-valid" > select="following-sibling::DIV|following-sibling::P|following- > sibling::OL|fo > llowing-sibling::UL" /> > <xsl:apply-templates select="*|comment()|pi()|text()"/> > <xsl:if test="$following-valid[1] = > following-sibling::DIV[1]"> > <br /> > </xsl:if> > </xsl:template> > > > Whether this works depends on whether the select in the > variable returns > > everything in document order Technically the value of the variable is a unordered node-set, and the filter expression $following-valid[1] selects the node in this node-set that comes first in document order. So in effect, yes, you're OK. But the "=" test is wrong: it compares the string-values of the nodes, not their identity. To compare identity, use generate-id(X)=generate-id(Y), or count(X|Y)=1. Except that in this case, I think you can simply say <xsl:if test="$following-valid[1][self::DIV]">. Mike Kay > 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
|