Thanks, yes, a much clearer description of the problem.
I would tackle this in the serialization phase rather than the
transformation phase. How you do this depends on your environment. In many
cases the simplest approach is probably to write out the HTML using the
standard serializer, and then put it through a simple script (sed or perl)
that replaces " by \". A more elaborate solution with a processor like Saxon
would be to write a custom output method by subclassing the HTML output
method.
Michael Kay
http://www.saxonica.com/
-----Original Message-----
From: Anirvan Majumdar
[mailto:anirban(_dot_)majumdar(_at_)taxilalab(_dot_)com]
Sent: 07 August 2008 10:29
To: xsl-list(_at_)lists(_dot_)mulberrytech(_dot_)com
Subject: Re: [xsl] Escaping <xsl:element> ouput
True, even I felt that the explanation of my problem was a
bit convoluted. I'll try and simply put across what it is
that I'm trying to achieve here [though the scope of the
whole problem is a bit too vast]:
Considering that I have an input XML like:
<person>
<name>ABC</name>
<age>24</age>
<city>Bangalore</city>
</person>
This XML data needs to be converted into an HTML-like snippet
which would then be used to construct a JSON object. I'm not
quite sure whether you've worked with JSON before, but it is
simply a name-value pair construct in JavaScript. Each value
needs to be enclosed within double-quotes ("). So basically,
whatever value has to go in, CANNOT contain any ", or all "
need to be escaped (\").
So coming back to the XML above, the XSLT should generate a
HTML-like snippet shown below:
<table width=\"100%\">
<tr>
<td width=\"150\">
Name :
<input type=\"text\" value=\"[name_node_value]\"/>
</td>
</tr>
<tr>
<td width=\"150\">
Age :
<input type=\"text\" value=\"[age_node_value]\"/>
</td>
</tr>
<tr>
<td width=\"150\">
City :
<input type=\"text\" value=\"[city_node_value]\"/>
</td>
</tr>
</table>
This text can then be set as a value in the JSON construct.
The alogrithm I tried to adopt was:
1. Process i/p XML and store transformed text in a variable.
2. Use the text within this variable and use the in-built
XSLT function replace, to substitute all occurrences of " with \"
I hope this would help you understand my problem a bit better.
Thanks.
Michael Kay wrote:
You're talking about "tags". Tags don't exist in the data
manipulated
by XSLT. XSLT only manipulates nodes in a tree. The way to
solve your
problem is to use XSLT the way it was designed to be used: forget
about CDATA and tags, and think about element nodes.
Now take a step back, and tell us what you actually want to
achieve -
that is, the input and output of your transformation,
rather than your
incorrect attempts at coding the solution.
Michael Kay
http://www.saxonica.com/
-----Original Message-----
From: Anirvan Majumdar
[mailto:anirban(_dot_)majumdar(_at_)taxilalab(_dot_)com]
Sent: 07 August 2008 09:38
To: xsl-list(_at_)lists(_dot_)mulberrytech(_dot_)com
Subject: [xsl] Escaping <xsl:element> ouput
Hello,
I have a <xsl:variable> element which contains HTML snippet.
Parts of this snippet are generated by transformations of
other XSLT
elements present.
Next on, I'd like to take this <xsl:variable>'s value and
apply some
string manipulation templates on it. I realized that if I
wanted to
extract the value inclusive of tags then I needed to
include the HTML
code, and not the XSLT code, within <![CDATA]]> sections.
Everything
seemed to be going fine until I realized that all the content
generated through the <xsl:element>s was missing. The tags are
ignored and only the node value is captured.
How can I get around this problem? I checked and there is
no way for
output escaping in <xsl:element>, and neither is there any
point of
putting the code within <[CDATA[]]> since the
transformations won't
occure only.
I also thought of using <xsl:copy-of> to extract the
variable value,
but this isn't of much use to me, since the data extracted through
copy-of cannot be used for any further processing as such.
I can only
display this value [something like <xsl:value-of>]
Here's an example of the kind of XSL I'm working on:
<xsl:variable name="someVar">
<![CDATA[
<span id="1">
<input type="text" value="A" name="txtVal"/>
]]>
<xsl:element name="input">
<xsl:attribute name="type">hidden<xsl:attribute>
<xsl:attribute name="value">[some value computed
before]</xsl:attribute>
</xsl:elelement>
<![CDATA[
</span>
]]>
</xsl:variable>
--~------------------------------------------------------------------
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>
--~--
--~------------------------------------------------------------------
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>
--~--