Subject: RE: [xsl] escaping from CDATA From: "Chris Bayes" <chris@xxxxxxxxxxx> Date: Fri, 26 Oct 2001 16:46:39 +0100 |
Or even just do something that would work function Fun(ctx) { var ipString = ""; if (typeof(ctx) == "object"){ if (ctx.length){ ipString = ctx.nextNode.text; }else{ return ''; } }else{ ipString = ctx; } var xml = new ActiveXObject("msxml2.domdocument"); xml.loadXML(ipString); return xml.selectSingleNode("/"); } Ciao Chris XML/XSL Portal http://www.bayes.co.uk/xml > -----Original Message----- > From: owner-xsl-list@xxxxxxxxxxxxxxxxxxxxxx > [mailto:owner-xsl-list@xxxxxxxxxxxxxxxxxxxxxx] On Behalf Of > Chris Bayes > Sent: 26 October 2001 15:38 > To: xsl-list@xxxxxxxxxxxxxxxxxxxxxx > Subject: RE: [xsl] escaping from CDATA > > > > Within XPath and XSLT, a node-set consisting of a single text > > node can be used anywhere that a string is expected. But not > > when you call JavaScript; your JavaScript function is > > expecting a string, and it doesn't know what to do if you > > give it a node-set instead. > > But that can easily be fixed in all cases with something like this. > > function Fun(ctx) { > vat ipString = ""; > if (typeof(ctx) == "object"){ > if (ctx.length){ > for (var i=0; i < 1; i++){ > ctxN = ctx.item(i); > if (ctxN.nodeType == 1) > ipString += _wander(ctxN); > if (ctxN.nodeType == 2) > ipString += ctxN.nodeValue; > } > }else{ > return ''; > } > }else{ > ipString = ctx; > } > var xml = new ActiveXObject("msxml2.domdocument"); > xml.loadXML(ipString); > return xml.selectSingleNode("/"); > } > function _wander(ctx){ > var retStr = ""; > for (var i=0; i < ctx.childNodes.length; i++){ > ctxN = ctx.childNodes[i]; > switch(ctxN.nodeType){ > case 1: > retStr += _wander(ctxN); > break; > case 3: > retStr += ctxN.nodeValue; > break; > default: > break; > } > } > return retStr; > } > > Which says if the argument is type object then it is either > an attribute node so use that value or an element/nodelist so > wander the subtree getting the string value, else the > argument is a string so use that. The _wander function > probably isn't needed in this case and you could just use > ipString += ctxN.nodeValue; but it allows situation like > > <parts><![CDATA[<element>]]> > <part1> > <![CDATA[<element attr="100"><a>100</a><b>200</b></element>]]> > </part1> > <part2> > <![CDATA[<element attr="100"><a>100</a><b>200</b></element>]]> > </part2> > <![CDATA[</element>]]></parts> > > If anyone is perverse enough to want to do that. > If you are limiting to one cdata then you could just do > > function Fun(ctx) { > var ipString = ""; > if (typeof(ctx) == "object"){ > if (ctx.length){ > ipString = ctxN.nodeValue; > }else{ > return ''; > } > }else{ > ipString = ctx; > } > var xml = new ActiveXObject("msxml2.domdocument"); > xml.loadXML(ipString); > return xml.selectSingleNode("/"); > } > > That way you can pass any type and not have to worry about > converting it to a string first. > > Ciao Chris > > XML/XSL Portal > http://www.bayes.co.uk/xml > > > XSL-List info and archive: http://www.mulberrytech.com/xsl/xsl-list > > XSL-List info and archive: http://www.mulberrytech.com/xsl/xsl-list
Current Thread |
---|
|
<- Previous | Index | Next -> |
---|---|---|
RE: [xsl] escaping from CDATA, Chris Bayes | Thread | Re: [xsl] escaping from CDATA, David Carlisle |
[xsl] rendering marginal XML, Jay Kline | Date | Re: [xsl] escaping from CDATA, David Carlisle |
Month |