我有一个xml文件,我正在通过xsl处理成csv文件。除了以外,它的工作非常好。 源xml包含一个节点,其值是分隔字符串 - 分隔符是冒号。 分隔字符串中的部分可能包含冒号 我需要用\
替换分隔符即我的xml看起来像这样:
<docnode>
<group>
<parent>
<child>value1a:value2:value3 part1: part2</child>
<other>some other stuff I don't care about</other>
</parent>
<group>
</group>
<parent>
<child>value1b:value2:value3 part1: part2</child>
<other>some other stuff I don't care about</other>
</parent>
</group>
</docnode>
我的xsl目前有:
<xsl:for-each select="group"><xsl:value-of select="translate(parent/child,':','\')"/></xsl:for-each>
此输出
value1a\value2\value3 part1\ part2
value1b\value2\value3 part1\ part2
我需要:
value1a\value2\value3 part1: part2
value1b\value2\value3 part1: part2
我知道它的坚果,但我无法控制格式。
我认为我应该能够使用正则表达式:[\ S],它将匹配一个后面没有空格的冒号。
我无法找到有关正则表达式的任何内容:translate(仅限正则表达式:替换) 例如:
当我尝试其中任何一个选项时,xsl都没有给我任何东西
帮助?? !!
答案 0 :(得分:0)
假设您使用的是XSLT 1.0处理器,没有扩展功能,则必须执行以下操作:
<xsl:template match="/docnode">
<xsl:for-each select="group">
<xsl:call-template name="replace">
<xsl:with-param name="string" select="parent/child"/>
</xsl:call-template>
<xsl:text> </xsl:text>
</xsl:for-each>
</xsl:template>
<xsl:template name="replace">
<xsl:param name="string"/>
<xsl:choose>
<xsl:when test="contains($string, ':')">
<xsl:value-of select="substring-before($string, ':')"/>
<xsl:choose>
<xsl:when test="starts-with(substring-after($string, ':'), ' ')">:</xsl:when>
<xsl:otherwise>\</xsl:otherwise>
</xsl:choose>
<xsl:call-template name="replace">
<xsl:with-param name="string" select="substring-after($string, ':')"/>
</xsl:call-template>
</xsl:when>
<xsl:otherwise>
<xsl:value-of select="$string"/>
</xsl:otherwise>
</xsl:choose>
</xsl:template>