Что вы можете сделать, это проверить, начинается ли строка для токенизации с кавычки.Если это так, выведите то, что находится в кавычках.Если это не так, токенизируйте его как обычно.
Пример ...
Ввод XML
<doc>
<value>abc|"x|y|z"|gh|ij</value>
<value>"x|y|z"|abc|gh|ij</value>
<value>abc|"x|y|z"|gh|"x|y|z"|ij</value>
<value>"x|y|z"|abc|"x|y|z"|gh|ij|"x|y|z"</value>
</doc>
XSLT 1.0
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output indent="yes"/>
<xsl:strip-space elements="*"/>
<xsl:template match="value">
<SplitString>
<xsl:call-template name="tokenize">
<xsl:with-param name="input" select="normalize-space()"/>
</xsl:call-template>
</SplitString>
</xsl:template>
<xsl:template name="tokenize">
<xsl:param name="delimiter" select="'|'"/>
<xsl:param name="input"/>
<xsl:choose>
<xsl:when test="starts-with($input, '"')">
<xsl:variable name="value" select="substring-before(substring-after($input,'"'),'"')"/>
<result>
<xsl:value-of select="normalize-space($value)"/>
</result>
<xsl:call-template name="tokenize">
<xsl:with-param name="input" select="normalize-space(substring($input,string-length($value)+3))"/>
</xsl:call-template>
</xsl:when>
<xsl:otherwise>
<xsl:variable name="value" select="substring-before(concat($input,$delimiter),$delimiter)"/>
<xsl:if test="string($value)">
<result>
<xsl:value-of select="normalize-space($value)"/>
</result>
</xsl:if>
<xsl:if test="string(substring-after($input,$delimiter))">
<xsl:call-template name="tokenize">
<xsl:with-param name="input" select="normalize-space(substring-after($input,$delimiter))"/>
</xsl:call-template>
</xsl:if>
</xsl:otherwise>
</xsl:choose>
</xsl:template>
</xsl:stylesheet>
Выход
<SplitString>
<result>abc</result>
<result>x|y|z</result>
<result>gh</result>
<result>ij</result>
</SplitString>
<SplitString>
<result>x|y|z</result>
<result>abc</result>
<result>gh</result>
<result>ij</result>
</SplitString>
<SplitString>
<result>abc</result>
<result>x|y|z</result>
<result>gh</result>
<result>x|y|z</result>
<result>ij</result>
</SplitString>
<SplitString>
<result>x|y|z</result>
<result>abc</result>
<result>x|y|z</result>
<result>gh</result>
<result>ij</result>
<result>x|y|z</result>
</SplitString>
Fiddle: http://xsltfiddle.liberty -development.net / bFDb2C9 / 2