[XSL-LIST Mailing List Archive Home]
[By Thread]
[By Date]
Bryan:
At 11:28 AM 2/13/02, you wrote:
You still haven't said what you mean by "position". This is murky because the position() function does not return the position of a node in any absolute sense (that is, its position relative to other nodes in the document), but rather its position in the processing flow (as I said, its position in the current node list). So
will get you different things depending on how the nodes were selected. For example, looking at your source, the element <file href="document3.xml"/>, when selected by
<xsl:apply-templates select="file"/> <= position() returns 2
This misunderstanding of position() is a common source of errors for new users of the language.
Well, name(..) will tell you the element type name of the parent, generate-id(..) will return a string unique to that parent for the run of the stylesheet, <xsl:number level="single"/> will tell you whether the file is the first, fourth or fifteenth file inside its parent, <xsl:number level="any" from="doc"/> will tell you whether it's first, fifteenth etc. within its 'doc' ancestor (wherever that is), etc. etc. Any of this information could be useful depending on what you need it for.
Yes, there are undoubtedly better ways to figure out what you want, since XPath and XSLT provide a multitude of approaches to locating nodes in the tree. But as it is, your question doesn't have a single answer since you haven't defined your terms.
It must be the coffee: maybe some chocolate milk is in order.
XSL-List info and archive: http://www.mulberrytech.com/xsl/xsl-list
RE: [xsl] determining position of a document included using document function
Subject: RE: [xsl] determining position of a document included using document function From: Wendell Piez <wapiez@xxxxxxxxxxxxxxxx> Date: Wed, 13 Feb 2002 13:03:49 -0500 |
Bryan:
At 11:28 AM 2/13/02, you wrote:
I run stylesheet1 against document1, document1 has a structure sort of like in all the classic "xinclude with xslt" examples: i.e <doc> <file href="document2.xml"/> <file href="document3.xml"/> </doc> so when I get to the file node I use the document function as above to load the document referred to by the href attribute, then I apply-templates against that document, however I found in the document I loaded at one point I would really have liked to know something about the position of the file node which had the attribute href from which I knew what document to load! :)
You still haven't said what you mean by "position". This is murky because the position() function does not return the position of a node in any absolute sense (that is, its position relative to other nodes in the document), but rather its position in the processing flow (as I said, its position in the current node list). So
<xsl:template match="file"> <xsl:value-of select="position()"/> </xsl:template>
will get you different things depending on how the nodes were selected. For example, looking at your source, the element <file href="document3.xml"/>, when selected by
<xsl:apply-templates/> <= position() returns 4 unless you're stripping space inside 'doc' in which case it's 2
<xsl:apply-templates select="file"/> <= position() returns 2
This misunderstanding of position() is a common source of errors for new users of the language.
I can actually see where that might get very useful to know, or the knowledge of what file's parent is, in cases where I load a document into the middle of another one, which I do often, and I suppose others do as well.
Well, name(..) will tell you the element type name of the parent, generate-id(..) will return a string unique to that parent for the run of the stylesheet, <xsl:number level="single"/> will tell you whether the file is the first, fourth or fifteenth file inside its parent, <xsl:number level="any" from="doc"/> will tell you whether it's first, fifteenth etc. within its 'doc' ancestor (wherever that is), etc. etc. Any of this information could be useful depending on what you need it for.
Obviously that could be done by passing a parameter but what if, as in this case, I need to apply-templates five or six times before I get to the actual template I need the info in.
Yes, there are undoubtedly better ways to figure out what you want, since XPath and XSLT provide a multitude of approaches to locating nodes in the tree. But as it is, your question doesn't have a single answer since you haven't defined your terms.
It must be the coffee: maybe some chocolate milk is in order.
Cheers, Wendell
====================================================================== Wendell Piez mailto:wapiez@xxxxxxxxxxxxxxxx Mulberry Technologies, Inc. http://www.mulberrytech.com 17 West Jefferson Street Direct Phone: 301/315-9635 Suite 207 Phone: 301/315-9631 Rockville, MD 20850 Fax: 301/315-8285 ---------------------------------------------------------------------- Mulberry Technologies: A Consultancy Specializing in SGML and XML ======================================================================
XSL-List info and archive: http://www.mulberrytech.com/xsl/xsl-list
Current Thread |
---|
|
<- Previous | Index | Next -> |
---|---|---|
RE: [xsl] determining position of a, Bryan Rasmussen | Thread | Re: [xsl] determining position of a, Jeni Tennison |
Re: [xsl] How to define a global pa, Thomas B. Passin | Date | [xsl] XSLT: SUM function Not work, Ragan, Mitch |
Month |