This is the mail archive of the
xsl-list@mulberrytech.com
mailing list .
Re: traversing the tree from an arbitrary node
- To: xsl-list at lists dot mulberrytech dot com
- Subject: Re: [xsl] traversing the tree from an arbitrary node
- From: "Chris d'Aquin" <CDAquin at questia dot com>
- Date: Wed, 15 Aug 2001 13:50:26 -0500
- Reply-To: xsl-list at lists dot mulberrytech dot com
Since my title got much more response than my question, here is a
simplified restate of my problem.
I am using XT on a Windows NT platform. When I run this line, I get the
error message of "expected node test":
<xsl:when test="id('$id')/from-ancestors(*[position()
=$elementDepth][self::rootTag])">
$id contains the ID of the tag I want, and $elementDepth contains the
number of steps down from the <rootTag> I expect to be. What I am trying
to say for that node test is "from the node that has this id, go up
$elementDepth ancestor nodes and see if that node is <rootTag>." What am I
doing wrong?
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
Chris d'Aquin, XML Engineer
Questia Media, Inc.
713.358.2515
cdaquin@questia.com
http://www.questia.com/
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
"Chris d'Aquin"
<CDAquin@questia.com> To: xsl-list@lists.mulberrytech.com
Sent by: cc:
owner-xsl-list@lists.mulber Subject: [xsl] traversing the tree from an
rytech.com arbitrary node
08/15/01 10:55 AM
Please respond to xsl-list
I am trying to traverse the tree from an arbitrary node (as designated by
its ID). But I can't get it right!
As some background, I have an XML document where if I find a certain tag
with a certain attribute I need to check the previous and/or following
identical tag to see if it is nested at the same depth within the document.
If not, there is a basic structural error within the file that needs to be
corrected before the XML file can be fully processed.
Here is some sample XML:
<rootTag>
<parentTag>
<childTag id='id1' att='checkThis'>
. . . some info . . .
</childTag>
</parentTag>
<parentTag>
<childTag id='id2' att='thisChecks'>
. . . some more info . . .
</childTag>
</parentTag>
</rootTag>
When I find a <childTag>, I count how deep the tag is from <rootTag>, get
the ID of the next <childTag>, then try to see if the next <childTag> is at
the same depth. Here are the steps from the stylesheet:
<xsl:if test="@att='checkThis'">
<xsl:variable name="elementDepth">
<xsl:value-of select="count(ancestor::*)" /> <!-- this gets the depth
of the current childTag from rootTag, right? -->
</xsl:variable>
<xsl:variable name="id">
<xsl:value-of select="following::childTag[1]/@id" />
</xsl:variable>
<xsl:choose>
<xsl:when test="id('$id')/from-ancestors(*[position()
=$elementDepth][self::rootTag])">
<!-- do nothing since this is the right depth -->
</xsl:when>
<xsl:otherwise>
. . . error message . . .
</xsl:otherwise>
</xsl:choose>
</xsl:if>
I am using XT on a Windows NT platform. When I run this, I get the error
message of "expected node test" for the line that has the id() function.
What I am trying to say for that node test is "from the node that has this
id, go up $elementDepth ancestor nodes and see if that node is <rootTag>."
What am I doing wrong?
Thanks,
Chris
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
Chris d'Aquin, XML Engineer
Questia Media, Inc.
713.358.2515
cdaquin@questia.com
http://www.questia.com/
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
XSL-List info and archive: http://www.mulberrytech.com/xsl/xsl-list
XSL-List info and archive: http://www.mulberrytech.com/xsl/xsl-list