Re: [xsl] Need to process mixed content(text() and node()) in string matching

Subject: Re: [xsl] Need to process mixed content(text() and node()) in string matching
From: Michael Kay <mike@xxxxxxxxxxxx>
Date: Thu, 09 Dec 2010 09:25:28 +0000
On 09/12/2010 09:02, Mandar Jagtap wrote:

There are generally two kinds of approach to this problem:

1. convert everything to text, and then use xsl:analyze-string

2. convert everything to markup, and then use positional grouping.

I tend to prefer (2). So your first phase of processing finds the ":" and replaces it with <colon/>. The details depend on whether you know this will always be in a top-level text node (a child of <p>) or whether it might occur within deeper markup. Assuming it's top-level and you know there's exactly one colon, you can then do

<para1><xsl:copy-of select="colon/preceding-sibling::node()"/></para1>
<para1><xsl:copy-of select="colon/following-sibling::node()"/></para1>

which works even in XSLT 1.0.
Hi,

I have following scenario:

Source xml is:

<p>This is paragraph text..<b>and bold</b>  and normal<i>and
italic</i>  with value: ParagraphValue.</p>

The XSLT should match the string (mixed with text() of<p>, content of
element<i>,<b>) as " This is paragraph text..and bold and normal and
italic with value" in<p>  element and desired output given below.

<paragraph1>This is paragraph text..<b>and bold</b>  and normal<i>and
italic</i>  with value</paragraph1>
<paragraph2>ParagraphValue.</paragraph2>

I tried with following approach:

<xsl:template match="p">
   <xsl:choose>
     <xsl:when test="contains(. , ':')">
       <paragraph1><xsl:value-of select="substring-before(., ':')"/></paragraph1>
       <paragraph2><xsl:value-of select="substring-after(., ':')"/></paragraph2>
     </xsl:when>
    <xsl:otherwise><paragraph1><xsl:avlue-of
select="."/></paragraph1></xsl:otherwise>
   </xsl:choose>
</xsl:template>

But with I could get only string but not elements<b>  and<i>
alongwith its content.

Any suggestions on what would be best approach to achieve this?

Thanks in advance...

Current Thread