[XSL-LIST Mailing List Archive Home] [By Thread] [By Date] [Recent Entries] [Reply To This Message]

Re: Find and change an attribute in a Processing Inst

Subject: Re: Find and change an attribute in a Processing Instruction
From: "Rick Quatro" <frameexpert@xxxxxxxxxxxx>
Date: Mon, 30 Jan 2006 13:47:51 -0500
rick quatro
Hello All,

I modified an example in Michael's XSLT 2nd Edition, page 552. Here is my XML.

<?xml version="1.0" encoding="UTF-8"?>
<?Fm Condition Comment Red NO_OVERRIDE hide?>
<?Fm Condition Prolog PANTONE%20648-50%20CVP NO_OVERRIDE show?>
<?Fm Condition Internal Black DOUBLE_UNDERLINE hide?>
<concept>
 <title>Sample Title</title>
 <?Fm Condstart Prolog?>
 <prolog><author>bernard</author></prolog>
 <?Fm Condend Prolog?>
 <conbody>
   <section><p>Some sample text.</p>
   <draft-comment  author="Rick" importance="high">
   <p>an author comment</p>
   </draft-comment>
   <?Fm Condend Comment?>
   <p>Some more sample text.</p>
   </section>
  </conbody>
</concept>

Here is my stylesheet:

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">

<xsl:variable name="find" select="'hide'"/>
<xsl:variable name="replace" select="'show'"/>

<xsl:template name="do-replace">
 <xsl:param name="text"/>
 <xsl:choose>
 <xsl:when test="contains($text, $find)">
   <xsl:value-of select="substring-before($text, $find)"/>
   <xsl:value-of select="$find"/>
   <xsl:call-template name="do-replace">
     <xsl:with-param name="text" select="substring-after($text, $find)"/>
   </xsl:call-template>
 </xsl:when>
 <xsl:otherwise>
   <xsl:value-of select="$text"/>
 </xsl:otherwise>
 </xsl:choose>
</xsl:template>

<xsl:template match="*">
 <xsl:copy>
   <xsl:copy-of select="@*"/>
   <xsl:apply-templates/>
 </xsl:copy>
</xsl:template>

<xsl:template match="/processing-instruction()">
 <xsl:call-template name="do-replace">
   <xsl:with-param name="text" select="."/>
 </xsl:call-template>
</xsl:template>

</xsl:stylesheet>

Here is my output:

<?xml version="1.0" encoding="UTF-8"?>Condition Comment Red NO_OVERRIDE hideCondition Prolog PANTONE%20648-50%20CVP NO_OVERRIDE showCondition Internal Black DOUBLE_UNDERLINE hide<concept>
<title>Sample Title</title>


<prolog><author>bernard</author></prolog>

 <conbody>
   <section><p>Some sample text.</p>
   <draft-comment author="Rick" importance="high">
   <p>an author comment</p>
   </draft-comment>

   <p>Some more sample text.</p>
   </section>
  </conbody>
</concept>

There are three problems that I see:

1) The "hide" strings in the processing instructions are not being replaced by "show".
2) I am loosing the <? ?> delimiters on the processing instructions.
3) Lower level processing instructions are not getting written to the output (e.g. <?Fm Condstart Prolog?>).


One other thing I noticed: in order to declare non-numeric variables, I have to use two pairs of quotes ("''"). I couldn't find this documented anywhere.

I am using Saxon 8.5, but my stylesheet needs to be XSLT 1 compatible. Thanks in advance for any help you can give.

Rick Quatro
Carmen Publishing
585-659-8267
www.frameexpert.com

Current Thread

PURCHASE STYLUS STUDIO ONLINE TODAY!

Purchasing Stylus Studio from our online shop is Easy, Secure and Value Priced!

Buy Stylus Studio Now

Download The World's Best XML IDE!

Accelerate XML development with our award-winning XML IDE - Download a free trial today!

Don't miss another message! Subscribe to this list today.
Email
First Name
Last Name
Company
Subscribe in XML format
RSS 2.0
Atom 0.3
Site Map | Privacy Policy | Terms of Use | Trademarks
Free Stylus Studio XML Training:
W3C Member
Stylus Studio® and DataDirect XQuery ™are products from DataDirect Technologies, is a registered trademark of Progress Software Corporation, in the U.S. and other countries. © 2004-2013 All Rights Reserved.