Subject: RE: [xsl] Xpath and Ranges From: "David White" <davidw@xxxxxxxxxxx> Date: Fri, 4 Aug 2006 09:21:43 -0500 |
Sure, I have XML thatbs been converted from RTF > WordML > docbook XML The docbook XML lacks any sections. I have XML that looks like this <chapter> <title/> <para/> <title/> <para/> <para/> <title/> <para/> </chapter> Thatbs invalid docbook XML. What I want is something like this: <chapter> <title/> <para/> <sect1> <title/> <para/> <para/> <sect2> <title/> <para/> </sect2> </sect1> </chapter> -----Original Message----- From: Michael Kay [mailto:mike@xxxxxxxxxxxx] Sent: Friday, August 04, 2006 9:07 AM To: xsl-list@xxxxxxxxxxxxxxxxxxxxxx Subject: RE: [xsl] Xpath and Ranges > > Here is the template where I am trying to grab a set of nodes > in order to wrap them in a parent node (since this is docbook > Im trying to wrap things in sect1) > > <xsl:template match="for $T1 in (//title)[1], $T2 in The match attribute of xsl:template must be a pattern, it can't be a generalized XPath expression. Use xsl:apply-templates to select the nodes that you want to process, use xsl:template to define what processing to apply to the selected nodes. I suspect that what you want might be something like: <xsl:template match="/"> <sect1> <xsl:copy-of select="for $T1 in (//title)[1], $T2 in (//title)[2] return ($T1, //*[. >> $T1 and . << $T2])"/> </sect1> </xsl:template> but not quite: because if there's an X element that passes the test, then the children of X will probably pass it too, and if you copy X then you don't want to copy its children, or they'll end up in the output twice. So: you asked for an XPath expression that selected all the nodes between the two titles, but I don't think that's what you really wanted. It might be best to explain the real problem that you're trying to solve. Michael Kay http://www.saxonica.com/ > (//title)[2] return ($T1, //*[. >> $T1 and . << $T2])"> > <xsl:element name="sect1"> > <xsl:apply-templates/> > </xsl:element> > </xsl:template> > > I've installed Saxon 8.7.3N, and use XMLSpy with this commandline: > c:\saxon\Transform.exe -o %2 %1 %3 > > The error I get is: > > XSLT Pattern syntax error at char 0 on line 83 (the template > above), In {for $}: Unexpected token in patter, found "for" > Failed to compile stylesheet, 1 error detected. > > Hope that helps..let me know if I can supply any more information. > > FYI the material Im apply this too is going to be open to the > public (its actually apart of the OGL, open gaming license). > So, Im trying to learn how to apply XPATH. > > Thanks! > > David White > > -----Original Message----- > From: Michael Kay [mailto:mike@xxxxxxxxxxxx] > Sent: Friday, August 04, 2006 8:35 AM > To: xsl-list@xxxxxxxxxxxxxxxxxxxxxx > Subject: RE: [xsl] Xpath and Ranges > > > > > Could it be my software? XMLSpy 2006? > > > > Does your xsl:stylesheet element specify version="2.0"? IIRC, > XMLSpy invokes a 2.0 processor when you specify > version="2.0", and a 1.0 processor otherwise. > > Michael Kay > http://www.saxonica.com/
Current Thread |
---|
|
<- Previous | Index | Next -> |
---|---|---|
RE: [xsl] Xpath and Ranges, Michael Kay | Thread | Re: [xsl] Xpath and Ranges, David Carlisle |
Re: [xsl] XPath 2.0 Datatypes names, Colin Paul Adams | Date | Re: [xsl] Xpath and Ranges, David Carlisle |
Month |