WSO2 XSLT Mediator 制表符分隔字符串前的子字符串
WSO2 XSLT Mediator substring-before tab separated string
我正在尝试使用 substring-before 拆分一个制表符分隔值字符串,但我遇到了困难,因为 XSLT 调解器无法正常工作。
xslt 样式表:
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:p576="http://p576.test.ws" version="1.0">
<xsl:output encoding="UTF-8" method="xml" indent="yes"></xsl:output>
<xsl:param name="NAMESPACE"></xsl:param>
<xsl:param name="LOG_ID"></xsl:param>
<xsl:template match="/">
<xsl:element name="Response" namespace="{$NAMESPACE}">
<xsl:if test="$LOG_ID">
<xsl:element name="LogId" namespace="{$NAMESPACE}">
<xsl:value-of select="$LOG_ID"></xsl:value-of>
</xsl:element>
</xsl:if>
<xsl:element name="Text" namespace="{$NAMESPACE}">
<xsl:value-of select="substring-before(//p576:execMRPCResponse/p576:execMRPCReturn, '	')"></xsl:value-of>
</xsl:element>
</xsl:element>
</xsl:template>
</xsl:stylesheet>
字符串:
999900418559 59 4730 Payment Created & Posted
它没有剪切字符串“999900418559”,而是在此处剪切:“999900418559 59 4730 Payment” space 所在的位置。如果你使用 substring-before '$#32;' 会得到同样的结果查看字符串时,意味着制表符和 space 被转换为 space。
有什么办法可以避免这种情况发生吗?或者如果问题出在 wso2 使用的 saxon 版本上,我应该更新它吗(我使用的是 WSO2ESB v4.8.1)?
如果源文档中的制表符被转换为空格,那么这是在 Saxon 看到数据之前发生的。例如,如果数据通过架构验证器并且相关元素的类型使用 "collapse".
的空白面,则可能会发生这种情况
为了防止它发生,您首先需要找出它发生的时间和地点,而您的 post 中没有任何线索(至少对于从未听说过 WSO2ESB 的人而言)。
作为第一个诊断步骤,尝试捕获作为转换输入提供的源文档的确切形式,并检查它包含的空白的状态。
写完之后,我认为还有另一种可能性,即样式表中的 	
字符引用被编译样式表的任何进程破坏了。您可以通过将 '	'
替换为 codepoints-to-string(9)
.
来防御这种情况
我正在尝试使用 substring-before 拆分一个制表符分隔值字符串,但我遇到了困难,因为 XSLT 调解器无法正常工作。
xslt 样式表:
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:p576="http://p576.test.ws" version="1.0">
<xsl:output encoding="UTF-8" method="xml" indent="yes"></xsl:output>
<xsl:param name="NAMESPACE"></xsl:param>
<xsl:param name="LOG_ID"></xsl:param>
<xsl:template match="/">
<xsl:element name="Response" namespace="{$NAMESPACE}">
<xsl:if test="$LOG_ID">
<xsl:element name="LogId" namespace="{$NAMESPACE}">
<xsl:value-of select="$LOG_ID"></xsl:value-of>
</xsl:element>
</xsl:if>
<xsl:element name="Text" namespace="{$NAMESPACE}">
<xsl:value-of select="substring-before(//p576:execMRPCResponse/p576:execMRPCReturn, '	')"></xsl:value-of>
</xsl:element>
</xsl:element>
</xsl:template>
</xsl:stylesheet>
字符串:
999900418559 59 4730 Payment Created & Posted
它没有剪切字符串“999900418559”,而是在此处剪切:“999900418559 59 4730 Payment” space 所在的位置。如果你使用 substring-before '$#32;' 会得到同样的结果查看字符串时,意味着制表符和 space 被转换为 space。
有什么办法可以避免这种情况发生吗?或者如果问题出在 wso2 使用的 saxon 版本上,我应该更新它吗(我使用的是 WSO2ESB v4.8.1)?
如果源文档中的制表符被转换为空格,那么这是在 Saxon 看到数据之前发生的。例如,如果数据通过架构验证器并且相关元素的类型使用 "collapse".
的空白面,则可能会发生这种情况为了防止它发生,您首先需要找出它发生的时间和地点,而您的 post 中没有任何线索(至少对于从未听说过 WSO2ESB 的人而言)。
作为第一个诊断步骤,尝试捕获作为转换输入提供的源文档的确切形式,并检查它包含的空白的状态。
写完之后,我认为还有另一种可能性,即样式表中的 	
字符引用被编译样式表的任何进程破坏了。您可以通过将 '	'
替换为 codepoints-to-string(9)
.