Xml xsl:如何翻译或替换字符串?
我的xsl变量:Xml xsl:如何翻译或替换字符串?,xml,string,xslt,replace,translate,Xml,String,Xslt,Replace,Translate,我的xsl变量: <xsl:variable name="string">Satur - Sun - Mon - Tues - Wednes - Thurs - Fri</xsl:variable> <xsl:variable name="string">Satur - Sun - Mon - Tues - Wednes - Thurs - Fri</xsl:variable> <xsl:template match="/"
<xsl:variable name="string">Satur - Sun - Mon - Tues - Wednes - Thurs - Fri</xsl:variable>
<xsl:variable name="string">Satur - Sun - Mon - Tues - Wednes - Thurs - Fri</xsl:variable>
<xsl:template match="/">
<html>
<body>
<h2>result: </h2>
<xsl:value-of
select="for $token in tokenize($string, '\s-\s')
return(
document('')/*/config/replacement[find[.=$token]]/replace,
$token
)[1]"
separator=" - "
/>
</body>
</html>
</xsl:template>
</xsl:stylesheet>
因此,输出应如下所示:
Saturday - Sunday - Monday - Tuesday - Wednesday - Thursday - Friday
<xsl:variable name="string">Satur - Sun - Mon - Tues - Wednes - Thurs - Fri</xsl:variable>
<xsl:template match="/">
<html>
<body>
<h2>result: </h2>
<xsl:value-of
select="for $token in tokenize($string, '\s-\s')
return(
document('')/*/config/replacement[find[.=$token]]/replace,
$token
)[1]"
separator=" - "
/>
</body>
</html>
</xsl:template>
</xsl:stylesheet>
<xsl:variable name="string">Satur - Sun - Mon - Tues - Wednes - Thurs - Fri</xsl:variable>
<xsl:template match="/">
<html>
<body>
<h2>result: </h2>
<xsl:value-of
select="for $token in tokenize($string, '\s-\s')
return(
document('')/*/config/replacement[find[.=$token]]/replace,
$token
)[1]"
separator=" - "
/>
</body>
</html>
</xsl:template>
</xsl:stylesheet>
@马德斯·汉森我是
xsl
和xml
方面的新手,我试过你的代码,但不管用100%
这是错误的
<xsl:variable name="string">Satur - Sun - Mon - Tues - Wednes - Thurs - Fri</xsl:variable>
<xsl:template match="/">
<html>
<body>
<h2>result: </h2>
<xsl:value-of
select="for $token in tokenize($string, '\s-\s')
return(
document('')/*/config/replacement[find[.=$token]]/replace,
$token
)[1]"
separator=" - "
/>
</body>
</html>
</xsl:template>
</xsl:stylesheet>
我的xsl文件:
<xsl:variable name="string">Satur - Sun - Mon - Tues - Wednes - Thurs - Fri</xsl:variable>
<xsl:template match="/">
<html>
<body>
<h2>result: </h2>
<xsl:value-of
select="for $token in tokenize($string, '\s-\s')
return(
document('')/*/config/replacement[find[.=$token]]/replace,
$token
)[1]"
separator=" - "
/>
</body>
</html>
</xsl:template>
</xsl:stylesheet>
周六-周日-周一-周二-周三-周四-周五
结果:
我的xml文件:
<xsl:variable name="string">Satur - Sun - Mon - Tues - Wednes - Thurs - Fri</xsl:variable>
<xsl:template match="/">
<html>
<body>
<h2>result: </h2>
<xsl:value-of
select="for $token in tokenize($string, '\s-\s')
return(
document('')/*/config/replacement[find[.=$token]]/replace,
$token
)[1]"
separator=" - "
/>
</body>
</html>
</xsl:template>
</xsl:stylesheet>
<?xml version="1.0" encoding="ISO-8859-1"?>
<?xml-stylesheet type="text/xsl" href="index.xsl"?>
<config>
<replacement>
<find>Satur</find>
<replace>Saturday</replace>
</replacement>
<replacement>
<find>Sun</find>
<replace>Sunday</replace>
</replacement>
<replacement>
<find>Mon</find>
<replace>Monday</replace>
</replacement>
<replacement>
<find>Tues</find>
<replace>Tuesday</replace>
</replacement>
<replacement>
<find>Wednes</find>
<replace>Wednesday</replace>
</replacement>
<replacement>
<find>Thurs</find>
<replace>Thursday</replace>
</replacement>
<replacement>
<find>Fri</find>
<replace>Friday</replace>
</replacement>
</config>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
version="2.0"
xmlns:my="http://stackoverflow.com/questions/12502665/xsl-how-to-translate-or-replace-string">
<xsl:output indent="yes"/>
<xsl:variable name="string">Satur - Sun - Mon - Tues - Wednes - Thurs - Fri</xsl:variable>
<my:config>
<replacement>
<find>Satur</find>
<replace>Saturday</replace>
</replacement>
<replacement>
<find>Sun</find>
<replace>Sunday</replace>
</replacement>
<replacement>
<find>Mon</find>
<replace>Monday</replace>
</replacement>
<replacement>
<find>Tues</find>
<replace>Tuesday</replace>
</replacement>
<replacement>
<find>Wednes</find>
<replace>Wednesday</replace>
</replacement>
<replacement>
<find>Thurs</find>
<replace>Thursday</replace>
</replacement>
<replacement>
<find>Fri</find>
<replace>Friday</replace>
</replacement>
</my:config>
<xsl:template match="/">
<xsl:value-of
select="for $token in tokenize($string, '\s-\s')
return
(
document('')/*/my:config/replacement[find[.=$token]]/replace,
$token
)[1]"
separator=" - " />
</xsl:template>
</xsl:stylesheet>
<t>Satur - Sun - Mon - Tues - Wednes - Thurs - Fri</t>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="text"/>
<xsl:template match="/*">
<xsl:call-template name="replace">
<xsl:with-param name="pS" select=
"concat(normalize-space(translate(., '-', ' ')), 'day')"/>
</xsl:call-template>
</xsl:template>
<xsl:template name="replace">
<xsl:param name="pS"/>
<xsl:param name="pTarget" select="' '"/>
<xsl:param name="pReplacement" select="'day - '"/>
<xsl:if test="$pS">
<xsl:value-of select="substring-before(concat($pS,$pTarget), $pTarget)"/>
<xsl:if test="contains($pS, $pTarget)">
<xsl:value-of select="$pReplacement"/>
</xsl:if>
<xsl:call-template name="replace">
<xsl:with-param name="pS" select="substring-after($pS, $pTarget)"/>
<xsl:with-param name="pTarget" select="$pTarget"/>
<xsl:with-param name="pReplacement" select="$pReplacement"/>
</xsl:call-template>
</xsl:if>
</xsl:template>
</xsl:stylesheet>
周六
星期六
太阳
星期日
周一
星期一
周二
星期二
韦德内斯
星期三
星期四
星期四
星期五
星期五
我的代码出了什么问题?XSLT2.0解决方案:
<xsl:variable name="string">Satur - Sun - Mon - Tues - Wednes - Thurs - Fri</xsl:variable>
<xsl:template match="/">
<html>
<body>
<h2>result: </h2>
<xsl:value-of
select="for $token in tokenize($string, '\s-\s')
return(
document('')/*/config/replacement[find[.=$token]]/replace,
$token
)[1]"
separator=" - "
/>
</body>
</html>
</xsl:template>
</xsl:stylesheet>
<?xml version="1.0" encoding="ISO-8859-1"?>
<?xml-stylesheet type="text/xsl" href="index.xsl"?>
<config>
<replacement>
<find>Satur</find>
<replace>Saturday</replace>
</replacement>
<replacement>
<find>Sun</find>
<replace>Sunday</replace>
</replacement>
<replacement>
<find>Mon</find>
<replace>Monday</replace>
</replacement>
<replacement>
<find>Tues</find>
<replace>Tuesday</replace>
</replacement>
<replacement>
<find>Wednes</find>
<replace>Wednesday</replace>
</replacement>
<replacement>
<find>Thurs</find>
<replace>Thursday</replace>
</replacement>
<replacement>
<find>Fri</find>
<replace>Friday</replace>
</replacement>
</config>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
version="2.0"
xmlns:my="http://stackoverflow.com/questions/12502665/xsl-how-to-translate-or-replace-string">
<xsl:output indent="yes"/>
<xsl:variable name="string">Satur - Sun - Mon - Tues - Wednes - Thurs - Fri</xsl:variable>
<my:config>
<replacement>
<find>Satur</find>
<replace>Saturday</replace>
</replacement>
<replacement>
<find>Sun</find>
<replace>Sunday</replace>
</replacement>
<replacement>
<find>Mon</find>
<replace>Monday</replace>
</replacement>
<replacement>
<find>Tues</find>
<replace>Tuesday</replace>
</replacement>
<replacement>
<find>Wednes</find>
<replace>Wednesday</replace>
</replacement>
<replacement>
<find>Thurs</find>
<replace>Thursday</replace>
</replacement>
<replacement>
<find>Fri</find>
<replace>Friday</replace>
</replacement>
</my:config>
<xsl:template match="/">
<xsl:value-of
select="for $token in tokenize($string, '\s-\s')
return
(
document('')/*/my:config/replacement[find[.=$token]]/replace,
$token
)[1]"
separator=" - " />
</xsl:template>
</xsl:stylesheet>
<t>Satur - Sun - Mon - Tues - Wednes - Thurs - Fri</t>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="text"/>
<xsl:template match="/*">
<xsl:call-template name="replace">
<xsl:with-param name="pS" select=
"concat(normalize-space(translate(., '-', ' ')), 'day')"/>
</xsl:call-template>
</xsl:template>
<xsl:template name="replace">
<xsl:param name="pS"/>
<xsl:param name="pTarget" select="' '"/>
<xsl:param name="pReplacement" select="'day - '"/>
<xsl:if test="$pS">
<xsl:value-of select="substring-before(concat($pS,$pTarget), $pTarget)"/>
<xsl:if test="contains($pS, $pTarget)">
<xsl:value-of select="$pReplacement"/>
</xsl:if>
<xsl:call-template name="replace">
<xsl:with-param name="pS" select="substring-after($pS, $pTarget)"/>
<xsl:with-param name="pTarget" select="$pTarget"/>
<xsl:with-param name="pReplacement" select="$pReplacement"/>
</xsl:call-template>
</xsl:if>
</xsl:template>
</xsl:stylesheet>
周六-周日-周一-周二-周三-周四-周五
周六
星期六
太阳
星期日
周一
星期一
周二
星期二
韦德内斯
星期三
星期四
星期四
星期五
星期五
关于@Mads答案的变体:
<xsl:variable name="string">Satur - Sun - Mon - Tues - Wednes - Thurs - Fri</xsl:variable>
<xsl:template match="/">
<html>
<body>
<h2>result: </h2>
<xsl:value-of
select="for $token in tokenize($string, '\s-\s')
return(
document('')/*/config/replacement[find[.=$token]]/replace,
$token
)[1]"
separator=" - "
/>
</body>
</html>
</xsl:template>
</xsl:stylesheet>
<xsl:template match="/">
<xsl:value-of
select="for $token in tokenize($string, '\s-\s')
return concat($token, 'day')"
separator=" - " />
</xsl:template>
然后您可以省略I.XPath 2.0(XSLT 2.0)解决方案:
<xsl:variable name="string">Satur - Sun - Mon - Tues - Wednes - Thurs - Fri</xsl:variable>
<xsl:template match="/">
<html>
<body>
<h2>result: </h2>
<xsl:value-of
select="for $token in tokenize($string, '\s-\s')
return(
document('')/*/config/replacement[find[.=$token]]/replace,
$token
)[1]"
separator=" - "
/>
</body>
</html>
</xsl:template>
</xsl:stylesheet>
concat(replace(.,'\s+-\s*', 'day - '), 'day')
<xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="text"/>
<xsl:template match="/*">
<xsl:sequence select="concat(replace(.,'\s+-\s*', 'day - '), 'day')"/>
</xsl:template>
</xsl:stylesheet>
Saturday - Sunday - Monday - Tuesday - Wednesday - Thursday - Friday
Saturday - Sunday - Monday - Tuesday - Wednesday - Thursday - Friday
使用以下XPath 2.0一行程序:
<xsl:variable name="string">Satur - Sun - Mon - Tues - Wednes - Thurs - Fri</xsl:variable>
<xsl:template match="/">
<html>
<body>
<h2>result: </h2>
<xsl:value-of
select="for $token in tokenize($string, '\s-\s')
return(
document('')/*/config/replacement[find[.=$token]]/replace,
$token
)[1]"
separator=" - "
/>
</body>
</html>
</xsl:template>
</xsl:stylesheet>
concat(replace(.,'\s+-\s*', 'day - '), 'day')
<xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="text"/>
<xsl:template match="/*">
<xsl:sequence select="concat(replace(.,'\s+-\s*', 'day - '), 'day')"/>
</xsl:template>
</xsl:stylesheet>
Saturday - Sunday - Monday - Tuesday - Wednesday - Thursday - Friday
Saturday - Sunday - Monday - Tuesday - Wednesday - Thursday - Friday
基于XSLT的验证:
<xsl:variable name="string">Satur - Sun - Mon - Tues - Wednes - Thurs - Fri</xsl:variable>
<xsl:template match="/">
<html>
<body>
<h2>result: </h2>
<xsl:value-of
select="for $token in tokenize($string, '\s-\s')
return(
document('')/*/config/replacement[find[.=$token]]/replace,
$token
)[1]"
separator=" - "
/>
</body>
</html>
</xsl:template>
</xsl:stylesheet>
concat(replace(.,'\s+-\s*', 'day - '), 'day')
<xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="text"/>
<xsl:template match="/*">
<xsl:sequence select="concat(replace(.,'\s+-\s*', 'day - '), 'day')"/>
</xsl:template>
</xsl:stylesheet>
Saturday - Sunday - Monday - Tuesday - Wednesday - Thursday - Friday
Saturday - Sunday - Monday - Tuesday - Wednesday - Thursday - Friday
II。XSLT 1.0解决方案:
<xsl:variable name="string">Satur - Sun - Mon - Tues - Wednes - Thurs - Fri</xsl:variable>
<xsl:template match="/">
<html>
<body>
<h2>result: </h2>
<xsl:value-of
select="for $token in tokenize($string, '\s-\s')
return(
document('')/*/config/replacement[find[.=$token]]/replace,
$token
)[1]"
separator=" - "
/>
</body>
</html>
</xsl:template>
</xsl:stylesheet>
<?xml version="1.0" encoding="ISO-8859-1"?>
<?xml-stylesheet type="text/xsl" href="index.xsl"?>
<config>
<replacement>
<find>Satur</find>
<replace>Saturday</replace>
</replacement>
<replacement>
<find>Sun</find>
<replace>Sunday</replace>
</replacement>
<replacement>
<find>Mon</find>
<replace>Monday</replace>
</replacement>
<replacement>
<find>Tues</find>
<replace>Tuesday</replace>
</replacement>
<replacement>
<find>Wednes</find>
<replace>Wednesday</replace>
</replacement>
<replacement>
<find>Thurs</find>
<replace>Thursday</replace>
</replacement>
<replacement>
<find>Fri</find>
<replace>Friday</replace>
</replacement>
</config>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
version="2.0"
xmlns:my="http://stackoverflow.com/questions/12502665/xsl-how-to-translate-or-replace-string">
<xsl:output indent="yes"/>
<xsl:variable name="string">Satur - Sun - Mon - Tues - Wednes - Thurs - Fri</xsl:variable>
<my:config>
<replacement>
<find>Satur</find>
<replace>Saturday</replace>
</replacement>
<replacement>
<find>Sun</find>
<replace>Sunday</replace>
</replacement>
<replacement>
<find>Mon</find>
<replace>Monday</replace>
</replacement>
<replacement>
<find>Tues</find>
<replace>Tuesday</replace>
</replacement>
<replacement>
<find>Wednes</find>
<replace>Wednesday</replace>
</replacement>
<replacement>
<find>Thurs</find>
<replace>Thursday</replace>
</replacement>
<replacement>
<find>Fri</find>
<replace>Friday</replace>
</replacement>
</my:config>
<xsl:template match="/">
<xsl:value-of
select="for $token in tokenize($string, '\s-\s')
return
(
document('')/*/my:config/replacement[find[.=$token]]/replace,
$token
)[1]"
separator=" - " />
</xsl:template>
</xsl:stylesheet>
<t>Satur - Sun - Mon - Tues - Wednes - Thurs - Fri</t>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="text"/>
<xsl:template match="/*">
<xsl:call-template name="replace">
<xsl:with-param name="pS" select=
"concat(normalize-space(translate(., '-', ' ')), 'day')"/>
</xsl:call-template>
</xsl:template>
<xsl:template name="replace">
<xsl:param name="pS"/>
<xsl:param name="pTarget" select="' '"/>
<xsl:param name="pReplacement" select="'day - '"/>
<xsl:if test="$pS">
<xsl:value-of select="substring-before(concat($pS,$pTarget), $pTarget)"/>
<xsl:if test="contains($pS, $pTarget)">
<xsl:value-of select="$pReplacement"/>
</xsl:if>
<xsl:call-template name="replace">
<xsl:with-param name="pS" select="substring-after($pS, $pTarget)"/>
<xsl:with-param name="pTarget" select="$pTarget"/>
<xsl:with-param name="pReplacement" select="$pReplacement"/>
</xsl:call-template>
</xsl:if>
</xsl:template>
</xsl:stylesheet>
它起作用了。。但是,您只在替换词的末尾添加了day word
,以使satura
beSaturday
但是,法语中的days呢????感谢您的代码和帮助,但这不是我需要的解决方案+1@al-博士,这是对你的问题的一个完整而正确的回答——按照目前的定义。请更新问题,或者更好,问一个新问题。人们不必猜测你没有指定的内容。我是xsl
和xml
的新手,我尝试了你的代码,但它不起作用100%
这是错误的,我将把我的代码放在这里我的xsl文件:@al dr:用上面的模板替换Mads的模板,删除整个
块,其他一切都保持不变。然而,如果你需要几天的法语或多种语言,那么就使用Mads的解决方案,而不是这一个。你提到它不起作用,但没有告诉我们它在做什么不符合你的期望。它是否给出了错误?如果您试图通过在浏览器中加载XML来执行转换,则转换将不起作用。浏览器不支持XSLT 2.0,因为您将配置元素从XSLT中移出并移到了源XML中,所以您的浏览器不支持XSLT 2.0。需要调整XPath以删除“document(“”)/*”。