|
next
|
 Subject: replace the hex to space Author: Yama Kamyar Date: 24 Mar 2005 01:14 PM
|
Hi,
To ALL interested here is how regexp work with .NET. This XSLT will create a comma delimited file output of your XML
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:msxsl="urn:schemas-microsoft-com:xslt" xmlns:regExp="http://exslt.org/regular-expressions" extension-element-prefixes="regExp msxsl">
<msxsl:script language="JavaScript" implements-prefix="regExp">
<![CDATA[
/**
<doc:module date="2001-06-12">
<doc:module>exslt:regular-expressions</doc:module>
<doc:name>regExp</doc:name>
<doc:version>1.0</doc:version>
<doc:language>exslt:javascript</doc:language>
<doc:meta>
<doc:author email="chris@bayes.co.uk" url="http://www.bayes.co.uk">Chris Bayes</doc:author>
<doc:summary>Implementation of EXSLT - RegExp (http://www.exslt.org/regExp)</doc:summary>
<doc:todo></doc:todo>
</doc:meta>
</doc:module>
**/
/**
<doc:function date="2001-06-12">
<doc:name>replace</doc:name>
<doc:version>1.0</doc:version>
<doc:return type="string" />
<doc:args>
<doc:arg name="context" type="context" default="null" optional="no"></doc:arg>
<doc:arg name="regExp" type="string" default="''" optional="no"></doc:arg>
<doc:arg name="flags" type="string" default="''" optional="no"></doc:arg>
<doc:arg name="repStr" type="string" default="''" optional="no"></doc:arg>
</doc:args>
</doc:function>
**/
/**
Function Syntax
string regexp:replace(string, string, string, string)
The regexp:replace function replaces the parts of a string that match a regular expression with another string.
The first argument is the string to be matched and replaced. The second argument is a regular expression that follows the Javascript regular expression syntax. The fourth argument is the string to replace the matched parts of the string.
The third argument is a string consisting of character flags to be used by the match. If a character is present then that flag is true. The flags are:
g: global replace - all occurrences of the regular expression in the string are replaced. If this character is not present, then only the first occurrence of the regular expression is replaced.
i: case insensitive - the regular expression is treated as case insensitive. If this character is not present, then the regular expression is case sensitive.
FunctionThe following example shows how to use the regexp:replace function:
Source
<a>
<c>Is this EXSLT? No. no</c>
</a>
Stylesheet
<xsl:template match="a">
<xsl:apply-templates />
</xsl:template>
<xsl:template match="*">
<out>
<xsl:value-of select="." />
-
<xsl:value-of select="regexp:replace(string(.), 'no', 'g', 'yes!!!')" />
<xsl:value-of select="regexp:replace(string(.), 'no', 'gi', 'yes!!!')" />
<xsl:apply-templates select="*" />
</out>
</xsl:template>
Result
<out>Is this EXSLT? No. no -
Is this EXSLT? No. yes!!!Is this EXSLT? yes!!!. yes!!!</out>
**/
/**
MORE INFORMATION: http://www.exslt.org/regexp/functions/replace/
**/
/**
Author: Yama Kamyar
URL: http://blog.yamabiz.com/ (coming soon)
**/
function replace(ctx, re, flags, repStr){
var ipString = "";
if (typeof(ctx) == "object"){
if (ctx.length){
for (var i=0; i < 1; i++){
var ctxN = ctx.item(i);
if (ctxN.nodeType == 1){
ipString += _wander(ctxN);
}
if (ctxN.nodeType == 2){
ipString += ctxN.nodeValue;
}
}
}else{
return '';
}
}else{
ipString = ctx;
}
var re = new RegExp(re, flags);
return ipString.replace(re, repStr);
}
function _wander(ctx){
var retStr = "";
for (var i=0; i < ctx.childNodes.length; i++){
var ctxN = ctx.childNodes[i];
switch(ctxN.nodeType){
case 1:
retStr += _wander(ctxN);
break;
case 3:
retStr += ctxN.nodeValue;
break;
default:
break;
}
}
return retStr;
}
]]>
</msxsl:script>
<xsl:output method="text" omit-xml-declaration="yes" indent="yes" encoding="utf-8"/>
<xsl:template match="/">
<xsl:for-each select="*/*">
<xsl:if test="position()=1">
<xsl:for-each select="*"><xsl:value-of select="regExp:replace(name(current()), '_x0020_','gi',' ')"/><xsl:if test="count(following-sibling::*) != 0">,</xsl:if></xsl:for-each>
<xsl:text> </xsl:text>
</xsl:if>
</xsl:for-each>
<xsl:for-each select="./*">
<xsl:apply-templates />
</xsl:for-each>
</xsl:template>
<xsl:template match="*">
<xsl:for-each select="*"><xsl:value-of select="text()"/><xsl:if test="count(following-sibling::*) != 0">,</xsl:if></xsl:for-each>
<xsl:text> </xsl:text>
</xsl:template>
</xsl:stylesheet>
Hope this will help!
~yamazed
|
top
|
 Subject: replace the hex to space Author: Yama Kamyar Date: 24 Mar 2005 01:31 PM
|
Hi,
To ALL interested here is how regexp work with .NET. This XSLT will create a comma delimited file output of your XML
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:msxsl="urn:schemas-microsoft-com:xslt" xmlns:regExp="http://exslt.org/regular-expressions" extension-element-prefixes="regExp msxsl">
<msxsl:script language="JavaScript" implements-prefix="regExp">
<![CDATA[
/**
<doc:module date="2001-06-12">
<doc:module>exslt:regular-expressions</doc:module>
<doc:name>regExp</doc:name>
<doc:version>1.0</doc:version>
<doc:language>exslt:javascript</doc:language>
<doc:meta>
<doc:author email="chris@bayes.co.uk" url="http://www.bayes.co.uk">Chris Bayes</doc:author>
<doc:summary>Implementation of EXSLT - RegExp (http://www.exslt.org/regExp)</doc:summary>
<doc:todo></doc:todo>
</doc:meta>
</doc:module>
**/
/**
<doc:function date="2001-06-12">
<doc:name>replace</doc:name>
<doc:version>1.0</doc:version>
<doc:return type="string" />
<doc:args>
<doc:arg name="context" type="context" default="null" optional="no"></doc:arg>
<doc:arg name="regExp" type="string" default="''" optional="no"></doc:arg>
<doc:arg name="flags" type="string" default="''" optional="no"></doc:arg>
<doc:arg name="repStr" type="string" default="''" optional="no"></doc:arg>
</doc:args>
</doc:function>
**/
/**
Function Syntax
string regexp:replace(string, string, string, string)
The regexp:replace function replaces the parts of a string that match a regular expression with another string.
The first argument is the string to be matched and replaced. The second argument is a regular expression that follows the Javascript regular expression syntax. The fourth argument is the string to replace the matched parts of the string.
The third argument is a string consisting of character flags to be used by the match. If a character is present then that flag is true. The flags are:
g: global replace - all occurrences of the regular expression in the string are replaced. If this character is not present, then only the first occurrence of the regular expression is replaced.
i: case insensitive - the regular expression is treated as case insensitive. If this character is not present, then the regular expression is case sensitive.
FunctionThe following example shows how to use the regexp:replace function:
Source
<a>
<c>Is this EXSLT? No. no</c>
</a>
Stylesheet
<xsl:template match="a">
<xsl:apply-templates />
</xsl:template>
<xsl:template match="*">
<out>
<xsl:value-of select="." />
-
<xsl:value-of select="regexp:replace(string(.), 'no', 'g', 'yes!!!')" />
<xsl:value-of select="regexp:replace(string(.), 'no', 'gi', 'yes!!!')" />
<xsl:apply-templates select="*" />
</out>
</xsl:template>
Result
<out>Is this EXSLT? No. no -
Is this EXSLT? No. yes!!!Is this EXSLT? yes!!!. yes!!!</out>
**/
/**
MORE INFORMATION: http://www.exslt.org/regexp/functions/replace/
**/
/**
Author: Yama Kamyar
URL: http://blog.yamabiz.com/ (coming soon)
**/
function replace(ctx, re, flags, repStr){
var ipString = "";
if (typeof(ctx) == "object"){
if (ctx.length){
for (var i=0; i < 1; i++){
var ctxN = ctx.item(i);
if (ctxN.nodeType == 1){
ipString += _wander(ctxN);
}
if (ctxN.nodeType == 2){
ipString += ctxN.nodeValue;
}
}
}else{
return '';
}
}else{
ipString = ctx;
}
var re = new RegExp(re, flags);
return ipString.replace(re, repStr);
}
function _wander(ctx){
var retStr = "";
for (var i=0; i < ctx.childNodes.length; i++){
var ctxN = ctx.childNodes[i];
switch(ctxN.nodeType){
case 1:
retStr += _wander(ctxN);
break;
case 3:
retStr += ctxN.nodeValue;
break;
default:
break;
}
}
return retStr;
}
]]>
</msxsl:script>
<xsl:output method="text" omit-xml-declaration="yes" indent="yes" encoding="utf-8"/>
<xsl:template match="/">
<xsl:for-each select="*/*">
<xsl:if test="position()=1">
<xsl:for-each select="*"><xsl:value-of select="regExp:replace(name(current()), '_x0020_','gi',' ')"/><xsl:if test="count(following-sibling::*) != 0">,</xsl:if></xsl:for-each>
<xsl:text> </xsl:text>
</xsl:if>
</xsl:for-each>
<xsl:for-each select="./*">
<xsl:apply-templates />
</xsl:for-each>
</xsl:template>
<xsl:template match="*">
<xsl:for-each select="*"><xsl:value-of select="text()"/><xsl:if test="count(following-sibling::*) != 0">,</xsl:if></xsl:for-each>
<xsl:text> </xsl:text>
</xsl:template>
</xsl:stylesheet>
Hope this will help!
~yamazed
|
|
|
|