xsl-list
[Top] [All Lists]

RE: [xsl] Accessing xml node data using variable

2006-04-22 02:18:55
Firstly, packing information into structured element names is bad design.
This is what attributes are for. Don't use <title-en> and <title-nl>, use
<title xml:lang="en"> and <title xml:lang="nl">.

Secondly, this doesn't work:

<xsl:value-of select="root/{$MyTitleName}"/>

You can't use curly braces inside an XPath expression, and you can't
construct XPath expressions dynamically from strings. You want

<xsl:value-of select="root/*[name() = $MyTitleName]"/>

or if you change the design,

root/title[(_at_)xml-lang=$lang]

Michael Kay
http://www.saxonica.com/ 

-----Original Message-----
From: Sanket Pattekar [mailto:sanket(_dot_)pattekar(_at_)gmail(_dot_)com] 
Sent: 22 April 2006 10:11
To: xsl-list(_at_)lists(_dot_)mulberrytech(_dot_)com
Subject: [xsl] Accessing xml node data using variable

Hi

I have a xml file called hello.xml that looks like <?xml 
version="1.0"?> <?xml-stylesheet type="text/xsl" 
href="hello.xsl"?> <root> <greeting>Hello world.</greeting> 
<title-en>News Title English</title-en> <title-nl>News Title 
Dutch</title-nl> </root>

Then I have the stylesheet called hello.xsl that looks like 
<?xml version="1.0" encoding="ISO-8859-1"?> <xsl:stylesheet 
version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform";>
      <xsl:variable name="lang" select="'en'" />
      <xsl:variable name="MyTitleName" 
select="concat('title-',$lang)"/>

      <xsl:template match="/">
              <head><title>Greeting</title></head>
                      <body>
                      <p>Words of greeting:<br/>
                              <b><i><u><xsl:value-of 
select="root/greeting"/></u></i></b><br/>
                              <b><i><u><xsl:value-of 
select="root/title-en"/></u></i></b><br/>
                              <b><i><u><xsl:value-of 
select="root/title-nl"/></u></i></b><br/>                             
                              <b><i><u><xsl:value-of 
select="root/{$MyTitleName}"/></u></i></b><br/>
                       </p>
                      </body>
      </xsl:template>
</xsl:stylesheet>

Now I want to create a variable called 'MyTitleName' in the 
stylesheet, that refrences my xml node. Any suggestion would 
be welcome.

Sanket

--~------------------------------------------------------------------
XSL-List info and archive:  http://www.mulberrytech.com/xsl/xsl-list
To unsubscribe, go to: http://lists.mulberrytech.com/xsl-list/
or e-mail: 
<mailto:xsl-list-unsubscribe(_at_)lists(_dot_)mulberrytech(_dot_)com>
--~--



--~------------------------------------------------------------------
XSL-List info and archive:  http://www.mulberrytech.com/xsl/xsl-list
To unsubscribe, go to: http://lists.mulberrytech.com/xsl-list/
or e-mail: <mailto:xsl-list-unsubscribe(_at_)lists(_dot_)mulberrytech(_dot_)com>
--~--

<Prev in Thread] Current Thread [Next in Thread>