[XSL-LIST Mailing List Archive Home]
[By Thread]
[By Date]
RE: [xsl] How can I test the last preceding text character?
Subject: RE: [xsl] How can I test the last preceding text character? From: Sascha Mantscheff <922492@xxxxxx> Date: Mon, 29 Oct 2007 23:56:56 +0100 |
Thank you. Additional question: -- Example -------------------------- <text xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="2.0"> x <a> This is parent text a not ending with an x. <d>This ends with an x</d> <e>This should issue a message.</e> This is parent text ending with an x </a> </text> -- /Example -------------------------- What irritates me is that in Oxygen the XPath //e/preceding::node()[1] highlights the blank space before <e>, while //e/preceding::node()[2] highlights the d element. But when I run Saxon on the example with the the test <xsl:if test="ends-with(preceding::node()[1],'x')"> it fires a the e element and refers to the d element, not to the blank space. Obviously, this is due to the <xsl:strip-space elements="*"/> directive in the XSL sheet. Can the XPath query control in the Oxygen IDE be configured to behave likewise? Thanks again for your fast response. s.m. > > This is parent text a not ending with an x. > > <d>This ends with an x</d> > > <e>This should issue a message.</e> > > This is parent text ending with an x </a> > > > Am Montag, den 29.10.2007, 21:37 +0000 schrieb Michael Kay: > Replace > > preceding-sibling::*[1]/text()[last()] > > with > > preceding-sibling::node()[1] > > If the preceding sibling is an element node, you'll get its string value > automatically, you don't need to get it's text node children explicitly. > > There's also an ends-with() function in 2.0 which might be clearer than > regular expressions for such a simple job. > > Michael Kay > http://www.saxonica.com/ > > > -----Original Message----- > > From: Sascha Mantscheff [mailto:922492@xxxxxx] > > Sent: 29 October 2007 21:28 > > To: xsl-list@xxxxxxxxxxxxxxxxxxxxxx > > Subject: [xsl] How can I test the last preceding text character? > > > > How do I test if the very last character of any preceding > > text - be it in a parent or a sibling - has a certain value? > > Example: > > > > <a> > > This is parent text a not ending with an x. > > <d>This ends with an x</d> > > <e>This should issue a message.</e> > > This is parent text ending with an x </a> > > > > Now I want to know for each child element is if it is > > preceded by an "x". > > I can check the sibling with > > > > <xsl:if test="matches(preceding-sibling::*[1]/text()[last()],'x\$') "> > > <xsl:message> > > Element <xsl:value-of select="name()"/> is preceded by an x. > > </xsl:message> > > </xsl:if> > > > > But I cannot test the surrounding parent content with the > > same model because the parent text may surround the child text. > > > > What's the way to do it?
Current Thread |
---|
|
<- Previous | Index | Next -> |
---|---|---|
RE: [xsl] How can I test the last p, Michael Kay | Thread | RE: [xsl] How can I test the last p, Michael Kay |
RE: [xsl] How can I test the last p, Michael Kay | Date | RE: [xsl] How can I test the last p, Michael Kay |
Month |