xsl-list
[Top] [All Lists]

[xsl] How to use parse-xml-fragment with a string that contains a less-than symbol (and the less-than symbol is not part of a start- or end-tag)?

2021-02-22 11:30:53
Hi Folks,

I want to parse, as XML, the contents of this comment:

<!--abc<style>hello, world</style>def--> 

The contents of that comment is not well-formed XML, so I extracted the 
contents and placed a <wrapper> element around it:

<xsl:variable name="wrapped-comment" as="xs:string">
    <xsl:value-of select="concat('&lt;wrapper&gt;', comment()/data(), 
'&lt;/wrapper&gt;')"/>
</xsl:variable>

Then I applied parse-xml-fragment to the variable:

<xsl:sequence select="parse-xml-fragment($wrapped-comment)" />

That produced the desired result:

<wrapper>abc<style>hello, world</style>def</wrapper>

Yea! 

Pretty cool. (Thanks Martin)

However, the actual comment that I have contains some nastiness: after the 
<style> end-tag is this string: <![endif]

So, the actual comment is this:

<!--abc<style>hello, world</style><![endif]-->

Eek!

When I apply parse-xml-fragment (after wrapping the comment's content in a 
<wrapper> element) I get this error:

   First argument to parse-xml-fragment() is not a well-formed 
   and namespace-well-formed XML fragment.

That makes perfect sense since the unescaped '<' at the end of the comment is 
causing problems.

Is there an elegant, simple solution to this problem, without manually changing 
<![endif] to &lt;![endif]?

/Roger
--~----------------------------------------------------------------
XSL-List info and archive: http://www.mulberrytech.com/xsl/xsl-list
EasyUnsubscribe: http://lists.mulberrytech.com/unsub/xsl-list/1167547
or by email: xsl-list-unsub(_at_)lists(_dot_)mulberrytech(_dot_)com
--~--


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