Help | Site Map
Connecting Tech Pros Worldwide
 
 
LinkBack Thread Tools
  #1  
Old July 29th, 2006, 09:35 PM
cmay
Guest
 
Posts: n/a
Default Removing Tabs from source XML in output from XSLT

I am having this problem...
Lets say that your source XML is formatted like this:
<somenode>
Here is some text
Here is some more text
</somenode>

When to a <xsl:value-of select="somenode" /I want the output to be
free of the tabs that are included in the source XML.
These tabs are not really part of the content, but rather just there
for formatting reasons.

I tried doing:
<xsl:value-of select='translate(somenode,"&#x9", "")'/>
But that didn't seem to have an effect.


Any way to do this?

  #2  
Old July 29th, 2006, 10:05 PM
Joe Kesselman
Guest
 
Posts: n/a
Default Re: Removing Tabs from source XML in output from XSLT

These tabs are not really part of the content, but rather just there
Quote:
for formatting reasons.
Well, the best answer is not to put them in for formatting, but to
format for humans at the time when humans want to read the data.
However, assuming that you're stuck with them...
Quote:
<xsl:value-of select='translate(somenode,"&#x9", "")'/>
No, that won't work; translate is strictly a replacement operation, and
can't be used to remove characters.

If you know there's only a single tab, you could use
concat(substring-before(somenode,"&#x9"),
substring-after(somenode,"&#x9"))
If there may be multiple tabs, you need to repeat that until all tabs
have been dealt with -- which in XSLT 1.0 means writing a recursive
named template and invoking it via call-template. (XSLT 2.0 has a
slightly more elegant syntax for writing and calling functions.) I'm
sure there are examples of this approach in the XSLT FAQ, or in many
decent XSLT tutorials.

Or you could invoke a non-XSLT extension function, if your processor
supports that.

--
() ASCII Ribbon Campaign | Joe Kesselman
/\ Stamp out HTML e-mail! | System architexture and kinetic poetry
  #3  
Old July 30th, 2006, 01:05 PM
Martin Honnen
Guest
 
Posts: n/a
Default Re: Removing Tabs from source XML in output from XSLT



cmay wrote:

Quote:
I tried doing:
<xsl:value-of select='translate(somenode,"&#x9", "")'/>
But that didn't seem to have an effect.
That tab character has code number 9 and a character reference needs to
end with a semicolon so you need
<xsl:value-of select='translate(somenode," ", "")'/>

That should do then in my view, contrary what Joe says, as translate
<http://www.w3.org/TR/xpath#function-translateindeed removes
characters found in the second argument string for which there are no
corresponding positions in the third argument string.

--

Martin Honnen
http://JavaScript.FAQTs.com/
  #4  
Old July 30th, 2006, 01:15 PM
Joe Kesselman
Guest
 
Posts: n/a
Default Re: Removing Tabs from source XML in output from XSLT

Good catch on the missing semicolon, and yes the removal should work; I
was misremembering. (Sigh. Don't type while tired.)

--
() ASCII Ribbon Campaign | Joe Kesselman
/\ Stamp out HTML e-mail! | System architexture and kinetic poetry
  #5  
Old July 30th, 2006, 01:35 PM
WideBoy
Guest
 
Posts: n/a
Default Re: Removing Tabs from source XML in output from XSLT

If you're working on a unix platform another simpler alternative may to
run your source xml file through a utility program such as 'detab' or
'entab'?

This would mean that you would not have to use any form of XSL at all
ofcourse.

HTH,

Naran.

cmay wrote:
Quote:
I am having this problem...
Lets say that your source XML is formatted like this:
<somenode>
Here is some text
Here is some more text
</somenode>
>
When to a <xsl:value-of select="somenode" /I want the output to be
free of the tabs that are included in the source XML.
These tabs are not really part of the content, but rather just there
for formatting reasons.
>
I tried doing:
<xsl:value-of select='translate(somenode,"&#x9", "")'/>
But that didn't seem to have an effect.
>
>
Any way to do this?
  #6  
Old July 30th, 2006, 02:15 PM
Michael Bednarek
Guest
 
Posts: n/a
Default Re: Removing Tabs from source XML in output from XSLT

On 30 Jul 2006 05:37:26 -0700, "WideBoy" wrote in comp.text.xml:
Quote:
>If you're working on a unix platform another simpler alternative may to
>run your source xml file through a utility program such as 'detab' or
>'entab'?
[snip]

There are numerous versions of detab available for Win32, too.

--
Michael Bednarek http://mbednarek.com/ "POST NO BILLS"
  #7  
Old July 30th, 2006, 10:05 PM
cmay
Guest
 
Posts: n/a
Default Re: Removing Tabs from source XML in output from XSLT

Thanks for responding guys.
Unfortunately, the typo was just in my newsgroup post, and not in my
code.
I tried it again but the tabs persist.

Even though these are definately tabs in my xml source, I wonder if
they are coming through as spaces somehow.

Anyway thanks for your help.



Chris



Joe Kesselman wrote:
Quote:
Good catch on the missing semicolon, and yes the removal should work; I
was misremembering. (Sigh. Don't type while tired.)
>
--
() ASCII Ribbon Campaign | Joe Kesselman
/\ Stamp out HTML e-mail! | System architexture and kinetic poetry
  #8  
Old July 31st, 2006, 03:15 AM
Joe Kesselman
Guest
 
Posts: n/a
Default Re: Removing Tabs from source XML in output from XSLT

cmay wrote:
Quote:
I tried it again but the tabs persist.
Are you sure the rest of your stylesheet is reasonable -- ie, that this
expression is indeed being evaluated at the right places?


--
() ASCII Ribbon Campaign | Joe Kesselman
/\ Stamp out HTML e-mail! | System architexture and kinetic poetry
  #9  
Old July 31st, 2006, 08:45 AM
George Bina
Guest
 
Posts: n/a
Default Re: Removing Tabs from source XML in output from XSLT

If you can use XSLT 2.0 then you can use a character map. Just add the
following lines to your stylesheet and the tabs will be removed from
output:

<xsl:character-map name="test">
<xsl:output-character character=" " string=""/>
</xsl:character-map>
<xsl:output use-character-maps="test"/>

Best Regards,
George
---------------------------------------------------------------------
George Cristian Bina
<oXygen/XML Editor, Schema Editor and XSLT Editor/Debugger
http://www.oxygenxml.com

cmay wrote:
Quote:
I am having this problem...
Lets say that your source XML is formatted like this:
<somenode>
Here is some text
Here is some more text
</somenode>
>
When to a <xsl:value-of select="somenode" /I want the output to be
free of the tabs that are included in the source XML.
These tabs are not really part of the content, but rather just there
for formatting reasons.
>
I tried doing:
<xsl:value-of select='translate(somenode,"&#x9", "")'/>
But that didn't seem to have an effect.
>
>
Any way to do this?
  #10  
Old July 31st, 2006, 03:55 PM
cmay
Guest
 
Posts: n/a
Default Re: Removing Tabs from source XML in output from XSLT

Yea it turned out that my xml editor was converting tabs to spaces.

I found some option to turn that off and the tab removal translate
function works fine.

Thanks guys!



Joe Kesselman wrote:
Quote:
cmay wrote:
Quote:
I tried it again but the tabs persist.
>
Are you sure the rest of your stylesheet is reasonable -- ie, that this
expression is indeed being evaluated at the right places?
>
>
--
() ASCII Ribbon Campaign | Joe Kesselman
/\ Stamp out HTML e-mail! | System architexture and kinetic poetry
  #11  
Old July 31st, 2006, 04:35 PM
cmay
Guest
 
Posts: n/a
Default Re: Removing Tabs from source XML in output from XSLT

Thanks George, I didn't know about that option and it looks pretty
good, good thing to know.

Is there anything similar that will allow for replacement of strings in
this manner?

I see that then 2nd parameter can be a string, but everything I have
read indicates that the first parameter "character" must be a single
character and can't be a string.

I'm guessing there isn't anything to do this other than writing your
own function correct?


Chris



George Bina wrote:
Quote:
If you can use XSLT 2.0 then you can use a character map. Just add the
following lines to your stylesheet and the tabs will be removed from
output:
>
<xsl:character-map name="test">
<xsl:output-character character=" " string=""/>
</xsl:character-map>
<xsl:output use-character-maps="test"/>
>
Best Regards,
George
---------------------------------------------------------------------
George Cristian Bina
<oXygen/XML Editor, Schema Editor and XSLT Editor/Debugger
http://www.oxygenxml.com
>
cmay wrote:
Quote:
I am having this problem...
Lets say that your source XML is formatted like this:
<somenode>
Here is some text
Here is some more text
</somenode>

When to a <xsl:value-of select="somenode" /I want the output to be
free of the tabs that are included in the source XML.
These tabs are not really part of the content, but rather just there
for formatting reasons.

I tried doing:
<xsl:value-of select='translate(somenode,"&#x9", "")'/>
But that didn't seem to have an effect.


Any way to do this?
  #12  
Old August 2nd, 2006, 08:45 AM
George Bina
Guest
 
Posts: n/a
Default Re: Removing Tabs from source XML in output from XSLT

You cannot replace strings, only characters. The replacement is a
string, for instance if you want to write an entity reference for a
specific character then you can map that character to the string that
represents an entity reference to that character.

Best Regards,
George
---------------------------------------------------------------------
George Cristian Bina
<oXygen/XML Editor, Schema Editor and XSLT Editor/Debugger
http://www.oxygenxml.com

cmay wrote:
Quote:
Thanks George, I didn't know about that option and it looks pretty
good, good thing to know.
>
Is there anything similar that will allow for replacement of strings in
this manner?
>
I see that then 2nd parameter can be a string, but everything I have
read indicates that the first parameter "character" must be a single
character and can't be a string.
>
I'm guessing there isn't anything to do this other than writing your
own function correct?
>
>
Chris
>
>
>
George Bina wrote:
Quote:
If you can use XSLT 2.0 then you can use a character map. Just add the
following lines to your stylesheet and the tabs will be removed from
output:

<xsl:character-map name="test">
<xsl:output-character character=" " string=""/>
</xsl:character-map>
<xsl:output use-character-maps="test"/>

Best Regards,
George
---------------------------------------------------------------------
George Cristian Bina
<oXygen/XML Editor, Schema Editor and XSLT Editor/Debugger
http://www.oxygenxml.com

cmay wrote:
Quote:
I am having this problem...
Lets say that your source XML is formatted like this:
<somenode>
Here is some text
Here is some more text
</somenode>
>
When to a <xsl:value-of select="somenode" /I want the output to be
free of the tabs that are included in the source XML.
These tabs are not really part of the content, but rather just there
for formatting reasons.
>
I tried doing:
<xsl:value-of select='translate(somenode,"&#x9", "")'/>
But that didn't seem to have an effect.
>
>
Any way to do this?
 

Bookmarks


Currently Active Users Viewing This Thread: 1 (0 members and 1 guests)
 
Thread Tools

Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is On
Smilies are Off
[IMG] code is Off
HTML code is Off
Trackbacks are On
Pingbacks are On
Refbacks are On

What is Bytes?

We are a network of experts and professionals in IT and software development that help one another with answers to tough questions and share insights. Get the best answers to your questions from over network members.
Post your question now . . .
It's fast and it's free

Popular Articles