position() doesn't return expected value

Yereth

Usenet Archive
Joined
Jan 19, 2004
Messages
5
Reaction score
0
Hi again,

still working on my xslt program and I ran into another problem. There is a file which a contains the following structure:

<key>1</key>
<dict>
        ...
</dict>
<key>2</key>
<dict>
        ..
</dict>

When I am in a "dict" tag I want to get the value from the key before it, because they belong to eachother.. (don't ask me why it's constructed like this, wasn't my work) Now I wrote the following code which should do the job:

<xsl:template match="plist/dict">
        <xsl:element name="playlist">
                <xsl:for-each select="child::dict/dict"> <xsl:call-template name="track"/> </xsl:for-each> </xsl:element> </xsl:template>

<xsl:template name="track">
        <xsl:element name="track">
                <xsl:variable name="pos" select="position"/> <xsl:apply-templates select="preceding-sibling::key[position $pos]"/> <xsl:for-each select="child::key"> <xsl:call-template name="key_value"/> </xsl:for-each> </xsl:element> </xsl:template>

Only, once pos has gained a value, it doesn't seem to get a new value in the next round of the "for-each" loop.. is this a bug or am I making a mistake in my thinking? Any help would be appreciated!

Thanks in advance,

Yereth
 

Peter Flynn

Usenet Archive
Joined
Jan 2, 2000
Messages
1,813
Reaction score
0
What I just said. To find the element position, count the preceding siblings of the same name, eg

<xsl:if test="count(preceding-sibling::dict)=0">

means "this is the first dict child of its parent".

Personally I would have called the existing function node-position and kept position to mean what it always meant before: position within the elements; but I think the design team assumed everyone would be processing without a DTD or Schema, and would therefore not be handling only element nodes. But that's life.

///Peter
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Members online

No members online now.

Forum statistics

Threads
548,042
Messages
3,104,223
Members
248,131
Latest member
Tonypshaw1

Latest Threads

Top