[XSL-LIST Mailing List Archive Home] [By Thread] [By Date] [Recent Entries] [Reply To This Message]

Re: how to test if a child node have a specific name?

Subject: Re: how to test if a child node have a specific name?
From: "Chen Yi" <chen_yi36@xxxxxxxxxxx>
Date: Fri, 28 May 2004 22:52:50 +0800
xsl if operator
Thanks for you explanation.
Your explanation is easily understand.
I think you have grasp the prime of XSLT.
I have two basic questions.
(1) what can I do to skip the text with newline and name ""? (2) <xsl:variable name="Operator">
<xsl:if test="child::*[1][self::AND]>
<xsl:value-of select="'AND'"/>
</xsl:if>
</xsl:variable>


So if the first element have the name 'AND', the Operator variable will have a text of AND.
And I use the following expression to test if Operator is set.


 <xsl:if test="$Operator = 'AND'">
   ....
 </xsl:if>

I konw the content of Vairable Oprator is a tree segment with a root node and a text. What the Oprator will like if the first child element is not AND?

 Thanks in advance
 Chen Yi


From: David Carlisle <davidc@xxxxxxxxx>
Reply-To: xsl-list@xxxxxxxxxxxxxxxxxxxxxx
To: xsl-list@xxxxxxxxxxxxxxxxxxxxxx
CC: xsl-list@xxxxxxxxxxxxxxxxxxxxxx
Subject: Re:  how to test if a child node have a specific name?
Date: Fri, 28 May 2004 14:25:47 +0100

> I want to know which one is the correct one?

they are all correct XSLT but I suspect none of them really tests what
you want,

Note that in
<a>
 <b/>
 <c/>
</a>

the first node of a does not have name "b" as it is a text node with
string value a newline and name "". So you probably want to test with
element nodes (*) rather than all nodes (node() )

test="child::node()[1]=NodeName"

This tests if the string value (ie, the content, not the name) of the
first node is equal to the string value of any child element with name
NodeName

so it would be true on

<a><x>hello</x> <hh/> <NodeName>hello</NodeName></x>

as the two "hello" are equal.

test="child::node()[1]='NodeName'"

tests if the string value of the first node is the string "Nodename"
so it would be true on


<a><x>NodeName</x> <hh/> </x>



test="name(child::node()[1])='NodeName'"


This is nearly what you want and would be true on
<a><NodeName>hello</NodeName>    ....</x>
But it is false on
<a>
 <NodeName>hello</NodeName>    ....
</x>

I suspect you want

test="*[1][self::NodeName]"

David


--
The LaTeX Companion
http://www.awprofessional.com/bookstore/product.asp?isbn=0201362996
http://www.amazon.co.uk/exec/obidos/tg/detail/-/0201362996/202-7257897-0619804



________________________________________________________________________
This e-mail has been scanned for all viruses by Star Internet. The
service is powered by MessageLabs. For more information on a proactive
anti-virus service working around the clock, around the globe, visit:
http://www.star.net.uk
________________________________________________________________________


_________________________________________________________________
SkA*;z5DEsSQ=xPP=;Aw#,GkJ9SC MSN Messenger: http://messenger.msn.com/cn


Current Thread

PURCHASE STYLUS STUDIO ONLINE TODAY!

Purchasing Stylus Studio from our online shop is Easy, Secure and Value Priced!

Buy Stylus Studio Now

Download The World's Best XML IDE!

Accelerate XML development with our award-winning XML IDE - Download a free trial today!

Don't miss another message! Subscribe to this list today.
Email
First Name
Last Name
Company
Subscribe in XML format
RSS 2.0
Atom 0.3
Site Map | Privacy Policy | Terms of Use | Trademarks
Free Stylus Studio XML Training:
W3C Member
Stylus Studio® and DataDirect XQuery ™are products from DataDirect Technologies, is a registered trademark of Progress Software Corporation, in the U.S. and other countries. © 2004-2013 All Rights Reserved.