在 XSLT 中拆分和转换分隔字符串



这是我想要转换的XML示例:

<dsQueryResponse>
  <Rows>
    <Row Contacts="#111;#Smith, John;#112;#Sue, Mary;#113;#Jones, Rick" />
    <Row Contacts="#114;#Lee, Thomas;#115;#Richards, Kate" />
  </Rows>
</dsQueryResponse>

使用 XSLT,我如何将其拆分为输出如下所示:

<div>
  <span>#111;#Smith, John</span>
  <span>#112;#Sue, Mary</span>
  <span>#113;#Jones, Rick</span>
</div>
<div>
  <span>#114;#Lee, Thomas</span>
  <span>#115;#Richards, Kate</span>
</div>
用作

分隔符而让每个集合都包含它;让我感到困惑。


编辑:
是的,我知道这篇文章。
我已经尝试过了,但它没有按照我需要的方式拆分。
;是一个分隔符也是要拆分的内容的一部分。

试试这个方式:

XSLT 1.0

<xsl:stylesheet version="1.0" 
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="xml" omit-xml-declaration="yes" version="1.0" encoding="utf-8" indent="yes"/>
<xsl:template match="/dsQueryResponse">
    <body>
        <xsl:for-each select="Rows/Row">
            <div>
               <xsl:call-template name="tokenize">
                    <xsl:with-param name="text" select="@Contacts"/>
                </xsl:call-template>
            </div>
        </xsl:for-each>
    </body>
</xsl:template>
<xsl:template name="tokenize">
    <xsl:param name="text"/>
    <xsl:param name="delimiter" select="';'"/>
    <xsl:choose>
        <xsl:when test="contains($text, $delimiter) and contains(substring-after($text, $delimiter), $delimiter)">
            <span>
                <xsl:value-of select="substring-before($text, $delimiter)"/>
                <xsl:value-of select="$delimiter"/>
                <xsl:value-of select="substring-before(substring-after($text, $delimiter), $delimiter)"/>
            </span>
            <!-- recursive call -->
            <xsl:call-template name="tokenize">
                <xsl:with-param name="text" select="substring-after(substring-after($text, $delimiter), $delimiter)"/>
            </xsl:call-template>
        </xsl:when>
        <xsl:otherwise>
            <span>
                <xsl:value-of select="$text"/>
            </span>
        </xsl:otherwise>
    </xsl:choose>
</xsl:template>
</xsl:stylesheet>


如果有XML地狱,你的源文档的作者应该在其中燃烧。

相关内容

  • 没有找到相关文章