Xml xsl:如何分割字符串?
我想用分号拆分地址;分为行,行之间用: e、 g.如果地址=123 Elm Street,我想输出123 Elm Street 但如果地址=榆树街123号;邮政信箱222,我想输出Xml xsl:如何分割字符串?,xml,xslt,xslt-1.0,xslt-2.0,Xml,Xslt,Xslt 1.0,Xslt 2.0,我想用分号拆分地址;分为行,行之间用: e、 g.如果地址=123 Elm Street,我想输出123 Elm Street 但如果地址=榆树街123号;邮政信箱222,我想输出 123 Elm Street<br />PO Box 222 有办法做到这一点吗?可能很简单,但我对XSLT不太熟悉 普通XSL选择器是 <xsl:value-of select="address"/> 我想修改这个XSLT片段,以分号分隔 更新:显然,答案涉及到函数substring b
123 Elm Street<br />PO Box 222
有办法做到这一点吗?可能很简单,但我对XSLT不太熟悉
普通XSL选择器是
<xsl:value-of select="address"/>
我想修改这个XSLT片段,以分号分隔
更新:显然,答案涉及到函数substring before和substring after的使用
但是我是XSLT的初学者,我真的需要一些帮助来实现这一点。如果您的XSLT处理器支持,您可以使用,否则,该链接包含一个使用以前的子字符串等函数的实现。I.纯XSLT 1.0解决方案: 这一转变: 当此转换应用于任何未使用的XML文档时,会产生相同的、正确的结果: 三、 使用XSLT2.0 将此转换应用于此XML文档时: 产生所需的正确结果:
可能的重复也许这是一个近乎重复的问题,但我不知道如何将这个问题的答案应用到我的问题上。看看我是如何发现的?我的XSLT处理器是一个web浏览器,Firefox 3.6或Safari 5。0@Jason在这种情况下,你不能依赖它,你需要自己提供函数;该实现可在链接的站点上使用。下面是一个示例:您能否解释not$pText=。语法?问题是什么。你在干什么?@Jason-S:。在XSLT和XPath中,表示当前节点上下文节点。不是$pText=。如果参数$pText的字符串值不等于当前节点的字符串值,则为true-我们只希望在这种情况下输出,否则我们的输出将以我是否可以将已存在的变量传递给param name=pText?@Perdomoff开始,是,在XSLT中,的select属性中提供的参数可以是任何XPath表达式,变量引用是有效的XPath表达式。在XSLT 2.0及更高版本中调用`时,为参数提供值也是如此。这确实有效,谢谢。我可以从另一个xsl文件传递变量吗?
<xsl:value-of select="address"/>
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output omit-xml-declaration="yes" indent="yes"/>
<xsl:template match="text()" name="split">
<xsl:param name="pText" select="."/>
<xsl:if test="string-length($pText)">
<xsl:if test="not($pText=.)">
<br />
</xsl:if>
<xsl:value-of select=
"substring-before(concat($pText,';'),';')"/>
<xsl:call-template name="split">
<xsl:with-param name="pText" select=
"substring-after($pText, ';')"/>
</xsl:call-template>
</xsl:if>
</xsl:template>
</xsl:stylesheet>
<t>123 Elm Street;PO Box 222;c/o James Jones</t>
123 Elm Street<br />PO Box 222<br />c/o James Jones
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:f="http://fxsl.sf.net/"
xmlns:testmap="testmap"
exclude-result-prefixes="xsl f testmap"
>
<xsl:import href="str-dvc-map.xsl"/>
<testmap:testmap/>
<xsl:output omit-xml-declaration="yes" indent="yes"/>
<xsl:template match="/">
<xsl:variable name="vTestMap" select="document('')/*/testmap:*[1]"/>
<xsl:call-template name="str-map">
<xsl:with-param name="pFun" select="$vTestMap"/>
<xsl:with-param name="pStr" select=
"'123 Elm Street;PO Box 222;c/o James Jones'"/>
</xsl:call-template>
</xsl:template>
<xsl:template name="replace" mode="f:FXSL"
match="*[namespace-uri() = 'testmap']">
<xsl:param name="arg1"/>
<xsl:choose>
<xsl:when test="not($arg1=';')">
<xsl:value-of select="$arg1"/>
</xsl:when>
<xsl:otherwise><br /></xsl:otherwise>
</xsl:choose>
</xsl:template>
</xsl:stylesheet>
123 Elm Street<br/>PO Box 222<br/>c/o James Jones
<xsl:stylesheet version="2.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output omit-xml-declaration="yes" indent="yes"/>
<xsl:template match="text()">
<xsl:for-each select="tokenize(.,';')">
<xsl:sequence select="."/>
<xsl:if test="not(position() eq last())"><br /></xsl:if>
</xsl:for-each>
</xsl:template>
</xsl:stylesheet>
<t>123 Elm Street;PO Box 222;c/o James Jones</t>
123 Elm Street<br />PO Box 222<br />c/o James Jones