xsl-list
[Top] [All Lists]

[xsl] Problem processing unescaped nested span TEXT with parse-xml-fragment

2019-04-04 05:47:04
Hello All,

I am struggling a bit with the parse-xml-fragment function and was wondering if 
anyone could help. Spans are being used in our application due to their nesting 
features (spans within spans). However, they are escaped by a different process 
before they come to the XSLT process and so are presented as unescaped TEXT. 
Because of this, we are using parse-xml-fragment to pull out unescaped TEXT and 
turn it back into markup content and it has worked fine because we have not hit 
any nested spans. But today we did.

I am wondering if there is a better way anyone could think about to revert 
unescaped nested spans back into markup content (i.e their spans).

I would be grateful for any suggestions!

The stylesheet code looks like this:

            <xsl:variable name="FRAGMENTTEXT" 
select="./Content/Fragment[contains(text(), '&lt;span ')]"/>
            <xsl:if test="$FRAGMENTTEXT!=''">                
                <xsl:variable select="parse-xml-fragment($FRAGMENTTEXT)" 
name="UNESCAPEDTEXT"/>
                <xsl:call-template name="annotations">
                    <xsl:with-param select="$UNESCAPEDTEXT" 
name="UNESCAPEDTEXT"/>
                    <xsl:with-param select="." name="EVENT"/>
                </xsl:call-template>
            </xsl:if>

Unescaped FRAGMENT TEXT example:

<Fragment>&lt;span&gt;&lt;span class="meta" cid="2"&gt;sassafras 
plant&lt;/span&gt; is a slightly black oil called &lt;span class="meta" 
cid="3"&gt;safrole&lt;/span&gt;.  Synthetic manufacturing methods are used to 
convert the safrole to &lt;span class="meta" cid="4"&gt;MDMA&lt;/span&gt;. 
Relative small amounts are required to create large amounts of &lt;span 
class="meta" cid="5"&gt;ecstacy&lt;/span&gt; pills.&lt;/span&gt;</Fragment>

Unescaped the Fragment looks like this:

<span>
            <span class="meta" cid="2">sassafras plant</span> 
            is a slightly black oil called 
            <span class="meta" cid="3">safrole</span>.
            Synthetic manufacturing methods are used to convert the safrole to 
            <span class="meta" cid="4">MDMA</span>
            . Relative small amounts are required to
            create large amounts of 
            <span class="meta" cid="5">ecstacy</span> pills.
</span>


The error:

Severity: fatal
Description: A sequence of more than one item is not allowed as the first 
argument of fn:parse-xml-fragment() ("In the rain forests of <span c...", 
"<span><span class="meta" cid="...")


Current Environment setup:
<?xml version="1.0" encoding="UTF-8"?><html 
xmlns="http://www.w3.org/1999/xhtml";><head><title>XSLT Processor 
Version</title></head><body><p>XSL version: 3.0</p><p>Vendor: 
Saxonica</p><p>Vendor URL: http://www.saxonica.com/</p><p>Product name: 
SAXON</p><p>Product version: PE 9.8.0.12</p><p>Is schema-aware: 
no</p><p>Supports serialization: yes</p><p>Supports backwards compatibility: 
yes</p></body></html>

Many thanks,

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