xsl-list
[Top] [All Lists]

RE: [xsl] Unwanted New Line on Output

2007-06-18 03:13:43
It would be better to wrap the department number in its own element:

<DEPT>
    <DEPT_NR>1</DEPT_NR>
    <EMPS>
       <EMP_NAME> Fred Bloggs</EMP_NAME>
       <EMP_AGE> 25 </EMP_AGE>
   </EMPS>

or if you prefer, in an attribute:

<DEPT NR="1">
    <EMPS>
       <EMP_NAME> Fred Bloggs</EMP_NAME>
       <EMP_AGE> 25 </EMP_AGE>
   </EMPS>

I can't actually explain the output you're getting, because if the template
is invoked with DEPT as the context node, then <xsl:value-of select="DEPT"/>
will select nothing (DEPT does not have a child called DEPT), while if it is
called with DEPT_DETAILS as the context node, it will select a string such
as

\n  1  \n  \n  \Fred Bloggs \n  25  \n \n \n Joe Smith  \n  35 ....

where \n is a newline.

If you can't redesign the XML, then you can pick up the department number
(with DEPT as the context node) using normalize-space(text()[1])

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

-----Original Message-----
From: Matt [mailto:puskas(_dot_)duck(_at_)gmail(_dot_)com] 
Sent: 18 June 2007 10:49
To: xsl-list(_at_)lists(_dot_)mulberrytech(_dot_)com
Subject: [xsl] Unwanted New Line on Output

Morning list!

I have the following XML structure:

<DEPT_DETAILS>
<DEPT>
  1
  <EMPS>
     <EMP_NAME> Fred Bloggs</EMP_NAME>
     <EMP_AGE> 25 </EMP_AGE>
 </EMPS>
 <EMPS>
     <EMP_NAME> Joe Smith</EMP_NAME>
     <EMP_AGE> 35 </EMP_AGE>
 </EMPS>
</DEPT>
<DEPT>
  2
  <EMPS>
     <EMP_NAME> Jill Bloggs</EMP_NAME>
     <EMP_AGE> 19 </EMP_AGE>
 </EMPS>
 <EMPS>
     <EMP_NAME> Gerry Halliwell</EMP_NAME>
     <EMP_AGE> 45 </EMP_AGE>
 </EMPS>
</DEPT>
</DEPT_DETAILS>

I want the following output (as text):

1 Fred Bloggs
1 Joe Smith
2 Jill Bloggs
2 Gerry Halliwell

So my template looks something like:

<xsl:apply-template mode="depts" select="DEPT_DETAILS/DEPT"/>

<xsl:template mode="depts" match="*">
  <xsl:param name="deptID" select="DEPT"/>
  <xsl:for-each select="EMPS">
     <xsl:value-of select="$deptID"/>
     <xsl:value-of select="EMP_NAME"/>
     <xsl:text>&#10;</xsl:text> <!-- Add CR -->
  </xsl:for-each>
</xsl:template>

But the output I am getting is along the lines of:

1
    Fred Bloggs
1
    Joe Smith
2
    Jill Bloggs
2
   Gerry Halliwell

With the emp name being on a second line. Is this caused 
because the dept_id is at a higher level in the XML 
structure? Is this a problem with my select="DEPT" actually 
selecting something more than just the ID for the department.

Any answers/suggestions appreciated....

Matt

--~------------------------------------------------------------------
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>